Xcode показывает ошибку при попытке напечатать объект с po <objectName>
, но только для одного проекта.
ошибка: не удалось материализовать структуру: размер переменной <varName> не соответствует размеру объекта ValueObject. Ошибка в Execute, не удалось PrepareToExecuteJITExpression
Отладчик XCode также показывает ВСЕ объекты как nil
( self
исключенные), когда они не ( NSLog
показывает правильный вывод, как видно на изображении). Я не знаю, что случилось с проектом. Любой другой проект работает нормально.
Есть идеи, что это может быть? (Очистка проекта не имела никакого эффекта.)
ios
objective-c
xcode
debugging
Binarian
источник
источник
NSString
s создал одну строку выше точки останова!Ответы:
Вы уверены, что не находитесь в «режиме выпуска»?
Если вы хотите увидеть значения переменных, вы должны быть в «Режиме отладки» (нажмите на название вашего проекта в левом верхнем углу рядом с кнопками «Пуск / Стоп», затем «Редактировать схему ...», затем «Выполнить», настройки, затем » Информация "вкладка, затем" Конфигурация сборки ". Здесь установите" Отладка ". Если он был на" Релиз ", это то, что вы видели все nils).
источник
debug configuration
?Build Settings
, что для свойства развертыванияStrip debug symbols during copy
установлено значение YES.Strip debug symbols during copy
вNO
иOptimization Level
кNone -O0
в проектеBuild Settings
Я установил «Уровень оптимизации» для конфигурации отладки «Нет», и это решило проблему.
источник
Fastest, Smallest[-Os]
и это сработало.Убедитесь, что Address Sanitizer отключен в настройках вашей Схемы. Средство очистки адресов не работает с отладчиком.
источник
Кажется, у каждого есть свое решение.
Для меня я использую
Objective-C
иSwift
в то же время.Прежде всего, перейдите к
TARGETS -> Build Settings
и искатьcode generation
Вы найдете
Apple LLVM 6.0
иSwift Compiler
Измените их
Optimization Level
все наNone
, затем Отладка, вы можете найти значение неnil
Удивительно, но как только вы видите значение, вы решаете эту проблему навсегда, тогда вы можете изменить
Optimization Level
его на прежнее значение.источник
Есть и другие способы, которыми это может произойти. Для меня это было потому, что значение «Другие флаги C» было установлено на «-O2», даже для отладочной сборки. Отключение этого для отладочной сборки решило проблему.
источник
Для меня Xcode отфильтровывал выходные данные отладчика. Убедитесь, что в качестве выходного параметра выбрано «Вывод отладчика» или «Весь вывод».
источник
Я только столкнулся с этой проблемой и обнаружил, что это потому, что
Deployment Postprocessing = YES
в настройках сборки.Изменив это, чтобы
NO
исправить это, как показано на скриншоте ниже:Версия Xcode: 6.0.1 (6A317) на OSX 10.9.5
источник
Я просто столкнулся с подобной проблемой: однажды внезапно отладчик XCode распечатал некоторые типы объектов, особенно NSStrings, как (null), хотя они были инициализированы значением. Распечатано через
правильное значение для объекта было показано.
Заблуждение! Решение проблемы было довольно простым: я просто выключил Xcode и перезагрузил компьютер. После перезапуска Xcode все снова работает нормально :).
источник
Убедитесь, что
Link-Time Optimization = No
в режиме отладки в настройках сборки.источник
Это все, что нужно для меня.
источник
Решения, приведенные здесь, также исправят ошибку, которую вы видите
error: <EXPR>:1:1: error: use of unresolved identifier
каждый раз, когда пытаетесьpo
использовать переменную.Для меня решение было пойти
Build Settings
и найтиOptimization Level
и убедиться, что каждыйDebug
параметр был установлен наNone
.источник
Перейдите к «Другие флаги C» в настройке сборки и установите значение отладки от -o2 до -O0.
источник
Я также столкнулся с этим, и когда я обнаружил, что я был в режиме выпуска, я переключаюсь на отладку ... не исправить. Оказывается, я должен был сначала сделать чистку (cmd + shift + k).
Поэтому я думаю, что после встроенного режима выпуска не все перекомпилируется при разработке, и поэтому lldb не может правильно читать символы. После очистки и перекомпиляции в разработке у меня все заработало.
источник
Реальность такова, что система должна работать "из коробки", а не из-за ссылок на множество различных настроек, до такой степени, что вещи могут работать для вас или нет.
Почему система не позволяет всегда отлаживать, когда в режиме отладки остается загадкой, на которую может ответить только Apple (если они заботятся, что в последнее время я сомневаюсь, что они делают).
В конце концов, разница между отладкой / без отладки заключается в дополнительных таблицах с метаданными, которые только заполняют пространство памяти / диска.
Если вы компилируете против симулятора или устройства напрямую, вам не нужны эти лишние мегабайты.
Поэтому нам нужно запустить дополнительные циклы, чтобы просто сделать простую и понятную вещь, которую все иды, которые я знаю с прошлого столетия, делают просто отлично.
И добавлю, для меня то, что сработало, изменило в «Отладке» оптимизацию времени соединения с «Монолитного» на «Нет» (xcode 8).
источник