Отладчик 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).