Налагоджувач Xcode не друкує об'єкти і не показує нуль, коли їх немає


165

Xcode показує помилку при спробі надрукувати об'єкт po <objectName>, але лише для одного проекту.

Знімок екрана

Помилка: Не вдалося здійснити структуру: розмір змінної <varName> не погоджується з розміром ValueObject Помилка в команді Execute, не вдалось PrepareToExecuteJITExpression

Відладчик Xcode також показує ВСІ об’єкти як nil( selfвиключені), коли їх немає ( NSLogпоказує правильний вихід, як показано на зображенні). Я не знаю, що не так з проектом. Кожен інший проект працює чудово.

Будь-яка ідея, що це може бути? (Чистка проекту не мала ефекту.)


Для мене це звучить як якесь питання з покажчиком, але я впевнений, що чесно кажучи. Що ви намагаєтесь зробити / виконати?
користувач2967030

3
Помилка виникає на кожному об'єкті цього проекту. Навіть NSStrings створив одну лінію над точкою розриву!
Бінаріан

1
Як сказано в питанні, очищення нічого не змінює; (але дякую за спробу. Додано повідомлення про помилку.
Binarian

3
Ви впевнені, що ви будуєте без оптимізацій? (-O0)
iccir

1
Оптимізація може бути встановлена ​​не тільки в налаштуваннях проекту, але і в цілях. Був м застряг :(
базилік

Відповіді:


269

Ви впевнені, що не перебуваєте в "режимі випуску"?

Якщо ви хочете побачити змінні значення, ви повинні бути в "режимі налагодження" (натисніть на назву проекту у верхньому лівому куті біля кнопок старту / зупинки, потім "Редагувати схему ...", потім "Запустити" налаштування, потім " Інформація ", потім" Конфігурація побудови ". Тут встановлено" Налагодження ". Якщо він був у розділі" Випуск ", це питання, який ви побачили всі нулі).


3
У мене є лише одна конфігурація, як змінити конфігурацію, щоб вона була схожою на debug configuration?
Бінаріан

2
Ну добре, я створив порожній проект, і тепер я бачу всі відмінності в Build Settings, властивість розгортання Strip debug symbols during copyбуло встановлено "ТАК".
Бінаріан

16
@ Alex1987 я поставив Strip debug symbols during copyв NOі Optimization Levelдо None -O0в проектіBuild Settings
Binarian

32
На жаль, у певних ситуаціях lldb робив це в режимі налагодження, при відключенні оптимізацій та присутніх символів налагодження. Час відвідати помилку report.apple.com
ctpenrose

4
Мав той самий випуск - рівень оптимізації був "Ні". Проблема полягала в тому, що оптимізація зв’язку часу (LTO) була встановлена ​​на "Так" також для режиму налагодження.
пі3

38

Я встановив "Оптимізаційний рівень" для конфігурації налагодження "Немає", і це вирішило проблему.


2
Смішно, що не вийшло. Я зробив навпаки. Я перейшов Fastest, Smallest[-Os]і це спрацювало.
Нейт-капелюх

Дуже багато пропозицій, але ця (встановлення оптимізації налагодження на "Немає") виправила це для мене.
Dejal

29

Переконайтеся, що в налаштуваннях схеми вимкнено адресу Sanitizer. Адрес Sanitizer не добре працює з налагоджувачем.

  1. Перейдіть до редагування схеми (Продукт >> Схема >> Редагувати схему), виберіть Запустити та перейдіть на вкладку Діагностика.
  2. Переконайтесь, що "Увімкнути дезинфікуючу адресу" вимкнено.

введіть тут опис зображення


4
Це було рішенням для мене. Мабуть, є багато причин, хоча це може статися.
manroe

16

Здається, у кожного є своє рішення.

Для мене я використовую Objective-Cі Swiftводночас.

Перш за все, перейдіть на TARGETS -> Build Settingsпошукиcode generation

Ви знайдете Apple LLVM 6.0 і Swift Compiler

Змініть їх Optimization Levelусе на None, то налагодження, ви можете знайти значення неnil

Дивовижно, як тільки ви побачите цінність, ви вирішите цю проблему назавжди, тоді ви зможете змінити Optimization Levelїї на колишню.


11

Є й інші способи, як це може відбутися. Для мене це було тому, що значення "Other C Flags" було встановлено на "-O2", навіть для збірки налагодження. Вимкнення цього завдання для збирання налагодження вирішило проблему.


9

Фільтрований вихід налагодження

Для мене Xcode відфільтрував вихід налагодження. Переконайтесь, що ваш вихідний параметр - «Вивідник відлагодження» або «Всі вихідні»


6

Я щойно стикався з цим питанням і виявив, що це було тому, що Deployment Postprocessing = YESв Налаштуваннях збірки.

Змінивши це, щоб NOвиправити це, як показано на скріншоті нижче:

введіть тут опис зображення

Версія Xcode: 6.0.1 (6A317) на OSX 10.9.5


5

Я просто зіткнувся з подібною проблемою: Одного разу відладчик Xcode надрукував деякі типи об'єктів, особливо NSStrings як (null), хоча вони були ініціалізовані зі значенням. Друкується через

NSLog(@"String value: %@", myString);

було показано правильне значення для об’єкта.

Заплутано! Вирішити проблему було досить просто: я просто вимкнув Xcode і перезапустив комп'ютер. Після перезавантаження Xcode все працює нормально :).


5

Переконайтеся Link-Time Optimization = Noв режимі налагодження в Налаштуваннях збірки.


Я просто зустрічаюся з цією проблемою в Xcode 8 тільки в моїх налаштуваннях динамічної побудови рамки! Thx
vmeyer

3
  1. Видалити отримані дані
  2. Досить Xcode / Перезапустити
  3. Чистий проект

Це все, що мені потрібно.


2

Рішення тут також виправлять помилку, яку ви бачите error: <EXPR>:1:1: error: use of unresolved identifierкожен раз, коли ви намагаєтеся змінити po.

Для мене рішення було перейти до Build Settingsпошуку Optimization Levelта переконатися, що кожен Debugпараметр встановлений None.


Це фактично зафіксувало це для мене. Будь-яка ідея, в чому полягає недолік відключення налаштування?
Джаспер

1

Перейдіть до "Інші прапори C" у налаштуваннях збірки та встановіть значення налагодження від -o2 до -O0


0

Я також наткнувся на це, і коли я виявив, що перебуваю в режимі випуску, переходжу на налагодження ... немає виправлення. Виявляється, мені довелося спочатку зробити чисте (cmd + shift + k).

Тому я думаю, що трапляється те, що після вбудованого режиму випуску не все перекомпілюється в розробку, і тому lldb не може правильно прочитати символи. Після очищення та перекомпіляції в розробці це працювало для мене.


-3

Реальність полягає в тому, що система повинна працювати нестандартно і не пов’язана з посиланнями на декілька різних налаштувань, до того, що все може працювати для вас чи ні.

Чому система не дозволяє завжди налагоджувати, коли в режимі налагодження є таємницею, на яку може відповісти тільки Apple (якщо вони піклуються, що пізніше я сумніваюся, що вони роблять).

Зрештою, різниця між налагодженням / не-налагодженням буде додаткові таблиці з метаданими, які заповнюють лише пам'ять / дисковий простір.

Якщо ви збираєтеся безпосередньо проти тренажера чи пристрою, то не будете піклуватися про ці зайві мегабайти.

Тож нам потрібно запустити додаткові петлі, щоб просто зробити дуже основну і просту річ, що всі ідентичні відомості, які я знаю з минулого століття, добре справляються.

І додати, для мене те, що працювало, змінювалося на «Налагодження» оптимізації зв’язку часу з «Моноліту» на «Ні» (xcode 8).


Xcode = Немає менеджера пакетів поза коробкою, автоматичне заповнення та інші функції працюють на волю, час збирання величезний і т. Д.
zirinisp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.