Почему мои точки останова не работают?

113

У меня установлены точки останова, но Xcode игнорирует их.

Алан Клей
источник
2
ПродуктЧистота мне помогла
Александр Бекерт
Мне пришлось полностью перезагрузить свой компьютер, чтобы они снова заработали, и теперь они глючат. Я использую xcode 10.2.1.
llamacorn
2
Xcode 11, перезагрузка и очистка Xcode не работает, перезагрузка Mac не работает. Удаление приложения на устройстве и повторная сборка устраняет эту проблему. Надеюсь, это кому-то поможет
Рэндалл Ван

Ответы:

148

Прежде всего, я на 100% согласен с предыдущими людьми, которые сказали « ВЫКЛЮЧИТЕ» Load Symbols Lazily .

Я хочу добавить еще две вещи.

(Мое первое предложение кажется очевидным, но в первый раз, когда мне его предложили, моя реакция была такой: «давай, пожалуйста, ты правда думаешь, что я не знаю лучше ... о.»)

  1. Убедитесь, что вы случайно не установили «Active Build Configuration» на «Release».

  2. В разделе «Цели» в графическом дереве вашего проекта щелкните правой кнопкой мыши цель и выберите «Получить информацию». Найдите свойство с именем «Generate Debug Symbols» (или подобное) и убедитесь, что оно ПРОВЕРЕНО (также известно, как ON). Кроме того, вы можете попробовать найти (также в Target >> Get Info) свойство под названием «Debug Information Format» и установить для него значение «Dwarf with dsym file».

В разделе «Цель >> Получить информацию» есть ряд других свойств, которые могут повлиять на вас. Найдите такие вещи, как оптимизация или сжатие кода, и выключите эти вещи (я предполагаю, что вы работаете в режиме отладки, так что это неплохой совет). Кроме того, обратите внимание на такие вещи, как символы снятия изоляции, и убедитесь, что он также выключен. Например, для параметра «Удалить связанный продукт» должно быть установлено значение «Нет» для цели отладки.

пестофаг
источник
8
В XCode 4.5.2 у меня была эта проблема, и она оказалась из-за того, что я включил «Оптимизацию времени соединения», так что это еще одна вещь, которую нужно проверить
taxilian
6
Чтобы изменить конфигурацию сборки, перейдите в Product -> Scheme -> Edit Scheme в Run - Info. Для меня то, что сработало, было проверкой «Debug Executable» в этом меню.
Джеффри Сан
2
Взлом верхнего ответа, чтобы добавить, что синтаксис Bison кажется еще одной (экзотической) причиной неработающих точек останова (см. Мой ответ ниже). Надеюсь, это сэкономит время следующему человеку с этой проблемой.
Дэйв
2
Также очень легко случайно переключить активацию точки останова с помощью ⌘Y. Так что берегитесь этого, дети.
dsgrnt
1
Я попробовал пункт номер 1, и он у меня сработал. Мне действительно помогло. Upvoted.
NSPratik
49

В Xcode 7 у меня сработало:

1) Убедитесь, что цель -> схема -> Выполнить - находится в режиме отладки (был Release)

2) Обязательно установите флажок «Отладка исполняемого файла», см. Ниже:

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

Одед Регев
источник
4
Именно это и случилось со мной, флажок был снят
anoop4real
То же самое для меня. Разве эта опция не должна быть включена по умолчанию (XCode 8.3)? Разве мы не должны быть разработчиками, которые все равно готовы отлаживать?
dgmz 06
Работал для меня в Xcode 9.3, было бы здорово, если бы вы предоставили другое изображение для варианта 1.
Кази Абдулла Аль Мамун
24

Перейдите в настройки отладки Xcode. Убедитесь, что НЕ выбран параметр «Загружать символы лениво».

Алан Клей
источник
7
К сожалению, в Xcode 6 нет настроек «отладки», а «лениво» не отображается в документации. Вздох.
Оскар
1
хорошо, теперь я не могу найти опцию «Load Symbols Lazily» в XCode 6
RNA,
14

У меня была такая же проблема (снова). После троекратной проверки «Лениво загружать символы» и удаления флагов генерации отладочной информации я сделал следующее:

  1. выйти из Xcode
  2. откройте окно терминала и перейдите в каталог проекта
  3. cd в каталог .xcodeproj
  4. удалите все, кроме файла .pbxproj (у меня были frank.mode1v3 и frank.pbxuser)

Вы можете выполнить ту же задачу в Finder, щелкнув правой кнопкой мыши пакет .xcodeproj и выбрав «Показать содержимое пакета».

Когда я перезапустил Xcode, все мои окна были сброшены в положение по умолчанию и т.д., но точки останова работали!

Франк Щерба
источник
2
Это работает, но удаляет все ваши настройки ... Это нужно делать, когда ничего не работает.
Реми Дулэге
работал у меня, спасибо. Интересно, почему Xcode так отстой. Xcode - худшее программное обеспечение, когда-либо написанное Apple.
Дак
Вау, ему 5 лет. Трудно поверить, что это все еще работает, и что это все еще проблема!
Франк Щерба
У меня не получилось. Я использую Xcode 6.01. Теперь, когда я строю, я получаю несколько ошибок, связанных с отсутствием файла. Я возвращаю свой код для разрешения.
Native_Mobile_Arch_Dev
Пришлось только перезапустить Xcode, мой случай был связан с управлением версиями git при фиксации данных состояния пользовательского интерфейса xcode.
Хуан Боэро,
13

Для Xcode 4.x: перейдите в раздел Продукт> Рабочий процесс отладки и снимите флажок «Показывать разборку при отладке».

Для Xcode 5.x выберите «Отладка»> «Рабочий процесс отладки» и снимите флажок «Показывать разборку при отладке».

бнеупаане
источник
11

Другой причиной

Установите DeploymentPostprocessingNO в BuildSettings - подробности здесь

Коротко -

Активация этого параметра означает, что двоичные файлы должны быть удалены, а для информации о режиме файла, владельце и группе должны быть установлены стандартные значения. [DEPLOYMENT_POSTPROCESSING]

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

GBK
источник
После обновления до XCode 7 этот параметр каким-то образом был YESтолько у меня, subprojectа затем точки останова не работали subprojects. И после настройки NOвсе было идеально!
Махешваран Рависанкар
У меня это сработало только после очистки проекта, поэтому будет выполнено полное восстановление.
Ран
8

См. Этот пост: Точки останова не работают в Xcode? . Возможно, вы нажимаете «Выполнить» вместо «Отладка», и в этом случае ваша программа не запускается с помощью gdb, и в этом случае вы не можете ожидать, что точки останова сработают!

Сунг
источник
В Xcode 6.4 теперь есть только кнопка «Выполнить», и то, запускает ли она конфигурацию отладки или нет, зависит от текущих выбранных настроек схемы.
user2067021
6

Одним из возможных решений для этого может быть .... перейдите в Продукт> Схема> Изменить схему> .. В разделе «Выполнить»> «Информация»> «Исполняемый файл» установите флажок «Отладка исполняемого файла».

Soropromo
источник
Этот сработал у меня после того, как я бился головой в течение 2 дней.
Дилип Перла,
рад, что помог.
Соропромо
5

Это заставило меня работать в Xcode 9 на полдня разочарований. В итоге это была простая настройка отладки.

Перейдите в раздел «Отладка»> «Рабочий процесс отладки» и убедитесь, что параметр «Всегда показывать дизассемблирование» отключен. Просто как тот. :(

Газ Лонг
источник
5

Решение для меня с XCode 9.4.1 (не остановилось ни на одной точке останова):

В разделе «Цель сборки» -> «Параметры сборки» -> «Уровень оптимизации»: переключено с «Оптимизировать по скорости» -> «Без оптимизации» (теперь работает медленнее, но работает)

Стриндер
источник
5

То, что решило это в моем случае, было довольно простым: в Xcode - Product - Clean Build Folder, а затем Product - Run (а не на кнопку Play Xcode).

(Была проблема с Xcode 11 -beta 4 после переключения на модульное тестирование с долгим нажатием кнопки воспроизведения Xcode)

Lukas
источник
4

Пришел на эту страницу с той же проблемой (код C в Xcode 6 не останавливается на точках останова), и ни одно из вышеперечисленных решений не сработало (проект был практически из коробки, с точки зрения настроек, так что мало шансов, что какие-либо настройки отладчика будут установить неверное значение) ...

Потратив некоторое время на устранение проблемы, я наконец выяснил виновника (для моего кода):

Xcode (/ LLVM) не любит #lineкоманды препроцессора в стиле Bison .

Их удаление устранило проблему (отладчик остановился на моих точках останова).

Дэйв
источник
4

Для Xcode 4:

go Product -> Debug ->  Activate Breakpoints
евья
источник
Спасибо! это помогло. Я собирался выложить это сам, видимо, я как-то по ошибке нажал ⌘Y.
Ovi
2

У меня много проблем с точками останова в Xcode (2.4.1). Я использую проект, который просто содержит другие проекты (например, решение в Visual Studio). Иногда я замечаю, что точки останова вообще не работают, если в стартовом проекте не установлена ​​хотя бы одна точка останова (то есть та, которая содержит точку входа для моего кода). Если единственные точки останова находятся в проектах «нижнего уровня», они просто игнорируются.

Также кажется, что Xcode правильно обрабатывает операции с точкой останова, только если вы действуете на точку останова, когда находитесь в проекте, который содержит исходную строку, на которой установлена ​​точка останова.

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

Чарльз Андерсон
источник
2

У меня не работали точки останова, а затем я выполнил Build / Clean All Targets, чтобы они снова заработали.


источник
2

Я думаю, проблема может заключаться в несовместимости версий устройства и Xcode. У меня возникает эта проблема при попытке отладки на моем iPhone 4S под управлением iOS 5.0.1. Я все еще использую Xcode 3.2.5. Я получил символы с телефона, выбрав «использовать это устройство для разработки» в окне Организатора. Однако этот телефон отказывается от точки останова. Мой старый 3GS будет иметь точку останова, тот же проект Xcode, те же настройки ... просто другое устройство, работающее под управлением iOS 4.0. Я предполагаю, что это ошибка Xcode в 3.2.5, поскольку у меня есть символы. Перепробовав все решения, опубликованные здесь до сих пор, я решил, что решение моей проблемы состоит в том, чтобы продолжить и перейти на XCode 4. Возможно, вы не сможете эффективно отлаживать, если ваш базовый SDK не ниже уровня системы, на которой выполняется отладка. Может это очевидно - может кто-нибудь подтвердить?

Изменить: я обновлю, когда смогу подтвердить, что это правда.

Гэвин
источник
2

Удаление моей папки Build решило проблему для меня.

Джек Беллис
источник
2

То же самое случилось со мной в XCode 6.3.1. Мне удалось это исправить:

  • Переход к View-> Navigators-> Show Debug Navigators
  • Щелкните правой кнопкой мыши в корне проекта -> Переместить точки останова (если выбран параметр Пользователь)
  • (Я также выбрал точки останова для совместного использования , хотя я не уверен, что это необходимо).

После внесения этого изменения я установил параметры « Переместить точки останова» обратно в проект и снял флажок « Совместное использование точек останова» , и все еще работал.

Я точно не знаю почему, но это возвращает мои точки останова.

Osk
источник
Спасибо! Это также исправило медленную
реакцию
2

Для этого, а также для Xcode 6 и выше убедитесь, что кнопка состояния точки останова активирована (кнопка в виде синей стрелки):

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

df611
источник
1

В Xcode 4

- Product menu > Manage Schemes
- Select the scheme thats having debugging problems (if only one choose that)
- Click Edit button at bottom
- Edit Scheme dialog appears
- in left panel click on Run APPNAME.app
- on Right hand panel make sure youre on INFO tab
- look for drop down DEBUGGER:
- someone had set this to None
- set to LLDB if this is your preferred debugger
- can also change BUILD CONFIGURATION drop down to Debug 
-      but I have other targets set to AdHoc which debug fine once Debugger is set
brian.clear
источник
1

Я нашел проблему. Каким-то образом в моем XCode был включен параметр « Показывать разборку при отладке », что создает эту проблему. Когда я отключил его, весь мой отладчик остановился в моем исходном коде.

Вы можете найти его: Product->Debug Workflow->Show Disassemblyпри отладке.

Perumal
источник
1

Вы можете активировать / деактивировать точки останова в раскрывающемся меню введите описание изображения здесь

Стэн
источник
1

Если ничего не помогает, вместо точки останова можно вызвать следующую функцию:

void BreakPoint(void) {
    int i=1;
    #if !__OPTIMIZE__
    printf("Code is waiting; hit pause to see.\n");
    while(i);
    #endif
}

Чтобы продолжить, вручную установите i в ноль, затем нажмите кнопку возобновления.

Уильям Джокуш
источник
1

Я пробовал все вышеперечисленное, но для меня только один раз отключение точек останова отладки и их активация сработали.

user8032120
источник
@IshantMrinal Почему это не актуально? Пользователь предоставил ответ, который работал в его сценарии.
Ноэль Видмер
0

При установке точки останова щелкните правой кнопкой мыши, и вы должны получить несколько вариантов того, как обрабатывается точка останова (переменные журнала и продолжить, приостановить выполнение и т. Д.)

Также убедитесь, что в настройках отладки не выбран параметр «Загружать символы лениво».

(Относится к Xcode 3.1, не уверен в прошлых / будущих версиях)

Скотт Суизи
источник
0

Также убедитесь, что на устройстве не установлен дистрибутив приложения из магазина AppStore.


источник
0

Еще одна вещь, которую следует проверить, - это то, что если у вас есть файл plist «Права» для вашего режима отладки (возможно, потому, что вы делаете что-то с Keychain), убедитесь, что в файле plist есть строка «get-task-allow» = YES. Без него отладка и логирование будут нарушены.

Дэвидканн
источник
0

Похоже, что для точек останова в Xcode есть 3 состояния. Если вы нажмете на них, они перейдут к другим настройкам. Темно-синий включен, серый цвет отключен, и я иногда видел бледно-синий цвет, который требовал, чтобы я снова щелкнул точку останова, чтобы она перешла к темно-синему цвету.

Кроме этого, убедитесь, что вы запускаете его с помощью команды отладки, а не команды запуска. Вы можете сделать это, нажав option + command + return или выбрав опцию Go (отладка) в меню запуска.

crackity_jones
источник
0

У меня есть Xcode 3.2.3 SDK 4.1. Точки останова не работают случайным образом. Я обнаружил, что если вы очистите сборку и используете команду touch под сборкой, они снова заработают.

Дэймон МакГилл
источник
0

Вот одна непонятная проблема, с которой я столкнулся: если вы работаете над общей библиотекой (или надстройкой), ваши точки останова станут желтыми при запуске, что может привести к разочарованию в клавиатуре и прерыванию процесса отладки. Что ж, не делай этого! Символы не будут загружены, пока приложение не загрузит библиотеку, после чего точки останова станут действительными. Я столкнулся с этой проблемой с плагином для браузера ... BP были отключены, пока я не перешел на страницу, на которой был создан мой плагин.

Тим Китинг
источник