Отладчик Xcode не печатает объекты и показывает nil, когда они не являются
Xcode показывает ошибку при попытке распечатать объект с помощью po <objectName>
, но только для одного проекта.
![Снимок экрана]()
Ошибка: не удалось материализировать struct: размер переменной <varName> не согласуется с размером ValueObject Исправлено в Execute, не удалось выполнить PrepareToExecuteJITExpression
Отладчик Xcode также отображает ВСЕ объекты как nil
(self
исключено), когда они не являются (NSLog
показывает правильный вывод, как видно на изображении).
Я не знаю, что случилось с проектом. Каждый другой проект отлично работает.
Любая идея, что это может быть? (Очистка проекта не имела эффекта.)
Ответы
Ответ 1
Вы уверены, что не находитесь в режиме "Release"?
Если вы хотите видеть значения переменных, вы должны находиться в режиме "Отладка" (нажмите на название своего проекта в левом верхнем углу рядом с кнопками запуска/остановки, затем "Изменить схему...", затем "Выполнить" настройки, затем вкладку "Информация", затем "Конфигурация сборки". Здесь установите "Отладка". Если на "Release" было указано, что вы видели все nils).
Ответ 2
Я установил "уровень оптимизации" для конфигурации "Отладка" на "Нет" и решил проблему.
Ответ 3
Убедитесь, что адрес Sanitizer отключен в настройках схемы. Адрес Sanitizer не работает с отладчиком.
- Перейдите в "Редактировать схему" ( "Продукт → Схема → Изменить схему" ), выберите "Выполнить" и перейдите на вкладку "Диагностика".
- Убедитесь, что параметр "Включить адресный дезинфицирующее средство" отключен.
![введите описание изображения здесь]()
Ответ 4
Кажется, у каждого есть свое решение.
Для меня я использую Objective-C
и Swift
в то же время.
Прежде всего, перейдите к TARGETS -> Build Settings
и выполните поиск code generation
Вы найдете Apple LLVM 6.0
и Swift Compiler
Измените их Optimization Level
all на None
, а затем Debug, вы можете найти значение не nil
Удивительно, как только вы увидите значение, вы решите эту проблему навсегда, тогда вы можете изменить Optimization Level
на нее раньше.
Ответ 5
Есть и другие способы, которые могут произойти. Для меня это было потому, что значение "Other C Flags" было установлено на "-O2", даже для сборки отладки. Отключение этого для сборки отладки разрешило проблему.
Ответ 6
Я только что столкнулся с этой проблемой и обнаружил, что это связано с тем, что Deployment Postprocessing = YES
в настройках сборки.
Изменение этого параметра на NO
исправлено, как показано на скриншоте ниже:
![enter image description here]()
Версия Xcode: 6.0.1 (6A317) на OSX 10.9.5
Ответ 7
![Отфильтрованный отладочный вывод]()
Для меня Xcode отфильтровывал вывод отладчика. Убедитесь, что ваш выходной параметр - выход отладчика или весь выход
Ответ 8
Я просто столкнулся с подобной проблемой: в какой-то момент внезапно отладчик Xcode напечатал некоторые типы объектов, особенно NSStrings как (null), хотя они были инициализированы значением. Отпечатано через
NSLog(@"String value: %@", myString);
было показано правильное значение для объекта.
Непонятный!
Решение проблемы было довольно простым: я просто закрыл Xcode и перезапустил свой компьютер. После перезапуска Xcode все снова отлично работает:).
Ответ 9
Убедитесь, что Link-Time Optimization = No
для режима отладки в настройках сборки.
Ответ 10
Решения здесь также исправят ошибку, где вы видите error: <EXPR>:1:1: error: use of unresolved identifier
каждый раз при попытке po
переменной.
Для меня решение состояло в том, чтобы перейти к Build Settings
и выполнить поиск Optimization Level
и убедиться, что для каждого параметра Debug
установлено значение None
.
Ответ 11
- Удалить производные данные
- Довольно Xcode/Restart
- Очистить проект
Это все, что мне понадобилось.
Ответ 12
Перейдите в "Другие флаги C" в настройке сборки и установите значение отладки от -o2 до -O0
Ответ 13
Я столкнулся с этим, и когда я обнаружил, что я был в режиме деблокирования, я переключаюсь на отладку... нет исправления. Оказывается, мне пришлось сначала сделать чистый (cmd + shift + k).
Итак, я думаю, что происходит после того, как после встроенного режима выпуска не все перекомпилировано в разработке, и поэтому lldb не может правильно прочитать символы. После очистки и перекомпиляции в разработке он работал у меня.
Ответ 14
Реальность заключается в том, что система должна работать из коробки и не из-за ссылок на несколько разных настроек, до такой степени, что все может сработать для вас или нет.
Почему система не позволяет всегда отлаживать, когда в режиме отладки есть тайна, на которую может ответить только Apple (если бы они заботились, о чем я сомневаюсь, они это делают).
В конце концов, разница между debug/non-debug будет дополнительными таблицами с метаданными, которые заполняют только пространство памяти/диска.
Если вы компилируете непосредственно на симулятор или устройство, вам не понадобятся эти дополнительные мегабайты.
Итак, нам нужно запустить дополнительные циклы, чтобы просто сделать очень простой и простой способ, который все, что я знаю с прошлого века, очень хорошо.
И добавить для меня то, что работало, менялось на "Debug" Оптимизация времени ссылки с "Монолит" на "Нет" (xcode 8).