"Имя проекта" было скомпилировано с оптимизацией-шаг может вести себя странно; переменные могут быть недоступны


попытка войти в код AFNetworking генерирует следующее предупреждение:

[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.

и, конечно, я не могу отладить код. Чтобы быть конкретным, я пытаюсь отладить UIImageView+AFNetworking категория, которая кажется невозможной. Изменение кода не имеет никакого эффекта (пробовал NSLog и т. д.) и при попытке войти в компиляторы переходит к ассемблерному коду и показывает UIImageView+TVASTAFNetworking как имя категории, которое не существует нигде в базе кода.

С Помощью Xcode 7. усвн 9 и 8. Cocoapods (без рамки)

обновление Я забыл упомянуть, что оптимизатор установлен в none как для выпуска, так и для отладки конфигурации, и я на самом деле использую Debug config.

обновление 2

Strip Debug Symbols тоже выключен.

12 176

12 ответов:

Если ваш проект использует Swift, в конфигурации проекта/цели есть два отдельных параметра "уровень оптимизации".

убедитесь, что вы установили их правильно:

  1. выберите свой проект на панели Навигатор проектов
  2. выберите Настройки вашего проекта под деревом "проект"
  3. перейдите на вкладку "настройки сборки"
  4. Поиск "уровень оптимизации", и вы увидите две настройки, один для LLVM и один для быстрый.
  5. установите соответствующую настройку (None [-O0] для LLVM и None [-0none] для Swift) для рассматриваемой конфигурации сборки.

was compiled with optimization stepping may behave oddlyvariables may not be available

выполнение этого разрешило это предупреждение для меня.

похоже, что ваш проект в режиме release. Режим выпуска компилирует приложение с большим количеством оптимизаций, но отладчики ненавидят оптимизацию, поэтому для надежной отладки приложения вам нужно переключить его в режим отладки, который уменьшает оптимизацию и добавляет кучу отладочной информации. Чтобы переключить его в режим отладки:

  • нажмите на свою схему в верхнем левом углу Xcode.

Click on your scheme in the top-left corner of Xcode.

  • Выберите "Правка Схема..."

Select "Edit Scheme..."

  • нажмите на выпадающее меню "конфигурация сборки". и измените его на режим отладки.

Click on the "Build Configuration" dropdown.

OK нашел проблему, это предупреждение появляется только тогда, когда вы нажмете точку останова, и источник находится в проекте, где включена оптимизация, не позволяя вам смотреть реальные значения переменных (каждый объект отображается как ноль, даже если это не так)

в моем случае, это произошло только при отладке шаг за шагом через зависимость cocoapod.

поэтому, даже если у вас правильно установлены основные целевые и проектные настройки (символ отладки Strip=OFF и уровень оптимизации None), вы нужно убедиться, что это то же самое для стручка проецирует ваш удар по точке останова.

enter image description here

оказывается, что после импорта старого проекта (Xcode 7.x+) к новому Xcode 8.3 (8E162), вероятно, из-за оптимизации компилятора, Swift Компилятор-Уровень Оптимизации по умолчанию установлено значение Быстрая, Однофайловая Оптимизация:

Before

изменив его на none, решил проблему:

after

Editor ->Validate Settings затем подтвердите все изменения. Тогда вы должны получить Swift Compiler Optimisation Level in place

значение по умолчанию None.

Я столкнулся с такой же проблемой сегодня, и понял (по крайней мере в моем случае). Я также использую CocoaPods, и у меня была эта проблема при запуске моей тестовой цели (Swift, смешанный с ObjC).

Я использую Xcode 7.2, с iOS 9.2 SDK.

на изображении ниже вы можете увидеть оптимизации для цели и проекта перед моим изменением:

optimization level before change

удивительно то, что даже если разрешенная оптимизация Нет [- O0], только после изменения настройки проекта с - Os до - O0 компилятор перестал оптимизировать цель.

ниже вы можете увидеть мои окончательные настройки:

optimization level after change

Это было решение для меня...

вдоль строк ответа гимино, если вы используете cocoapods, добавьте такую строку в Подфайл:

xcodeproj 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug

или для версий cocoapods >= 1.0 (спасибо Diejmon)

project 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug

где мой проект имеет 'отладка - местный', 'отладка - инсценировка', 'отладка производства' как отладить configuations в дополнение к стандартным 'отладка'

по умолчанию cocoapods обычно генерирует конфигурации модулей в качестве выпуска, это Строка Podfile позволяет вам сказать, что они отлаживаются.

Это было долгое время, но я наконец-то решил проблему. Есть третий флаг оптимизации LTO или Link Time Optimization и на удивление ни у кого нет упомянул об этом здесь, и по какой-то причине я тоже не обратил на это внимания. Это прямо там, над Optimization Level настройка как вы можете видеть на многих снимках экрана размещены здесь.

Итак, чтобы подвести итог, есть 3 разных флага оптимизации, которые вы хотите отключить для отладки:

  • оптимизация времени соединения LLVM (-flto)
  • уровень оптимизации LLVM (-O)
  • Уровень Оптимизации Компилятора Swift

enter image description here

дополнительная информация о LTO: http://llvm.org/docs/LinkTimeOptimization.html

вы уверены, что ваша конфигурация отладки не оптимизирует код (он не должен)? Похоже, что вы случайно включили оптимизацию для конфигурации отладки, и вы должны отключить ее от настроек цели.

эта ошибка случилась со мной дважды, и в каждом случае была ошибка в параметре URL, используемом для запроса Службы. В одном случае URL-адрес имел некоторое пространство в разделе порта, в другом случае некоторое необязательное значение не было развернуто.

таким образом, исправление должно было убедиться, что url-адрес для запроса хорошо сформирован. Больше информации о моем случае, и аналогичная отчетность то же самое здесь.

все, что я сделал, чтобы очистить (Product > Clean) мой проект и запустить его снова

Это может быть чрезмерное упрощение, но вы строите для выпуска или с оптимизацией (которые удаляют символы из Swift или LLVM) слишком высоко? Если это так, измените свою схему и переключитесь на отладку или измените настройки сборки для оптимизации swift или LLVM на None (0).