Подтвердить что ты не робот

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

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

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

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

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

Использование Xcode 7. iOS 9 и 8. Cocoapods (без Framework)

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

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

ОБНОВЛЕНИЕ 2

Strip Debug Symbols Также выключен.

4b9b3361

Ответ 1

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

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

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

enter image description here

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

Ответ 2

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

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

  • Выберите свой проект в панели "Навигатор проекта"
  • Выберите настройки проекта в дереве "ПРОЕКТ"
  • Нажмите вкладку "Настройка настроек"
  • Найдите "уровень оптимизации", и вы увидите две настройки: одну для LLVM и одну для быстрой.
  • Задайте соответствующую настройку (None [-O0] для LLVM и None [-0none] для Swift) для соответствующей конфигурации сборки.

был скомпилирован с оптимизацией, пошагово может привести к тому, что oddlyvariables могут быть недоступны

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

Ответ 3

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

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

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

  • Выберите "Редактировать схему..."

Select "Edit Scheme..."

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

Click on the "Build Configuration" dropdown.

Ответ 4

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

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

Таким образом, даже если у вас правильно установлены основная цель и параметры проекта (Strip Debug Symbol = OFF, а уровень оптимизации - None), вам нужно убедиться, что он совпадает с проектом Pod, с которого вы достигли точки останова.

enter image description here

Ответ 5

Оказывается, что после импорта старого проекта (Xcode 7.x +) в новый Xcode 8.3 (8E162), вероятно, из-за оптимизации компилятора, Swift Compiler - уровень оптимизации по умолчанию устанавливался как Fast, Single-File Оптимизация

До

Изменив это, никто не решил проблему:

after

Ответ 6

EditorValidate Settings затем подтвердите все изменения. Затем вы должны получить Уровень оптимизации Sweeper-компилятора на месте

Установите Debug на None.

Ответ 7

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

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

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

уровень оптимизации до изменения

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

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

уровень оптимизации после изменения

Ответ 8

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

По линии ответа gimino, если вы используете 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

Где MyProject имеет "Debug - local", "Debug - staging", "Debug - PRODUCTION" в качестве конфигурации отладки в дополнение к стандарту "Debug"

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

Ответ 9

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

Ответ 13

На случай, если кто-то столкнется с этой проблемой при отладке модуля, который использует библиотеку C внутри, есть еще одна вещь, которую вы должны изменить в настройках проекта, чтобы он работал в дополнение ко всему, что перечислено в потоке.

Перейдите в настройки проекта Pods → Ваша цель использования C → Настройки сборки → Apple Clang - Флаги -O3 компилятора → Другие флаги C и удалите флаг -O3 который каким-то образом туда попал.