Отладчик xcode 10 останавливается на некоторых точках останова, а на других - нет - PullRequest
0 голосов
/ 15 февраля 2019

Точки останова, которые работают, определяются дважды (я не знаю, как и почему они были созданы дважды).При редактировании этих точек останова элемент условия имеет две переключатели.Первый включен с текстом: «Использовать родительское условие точки останова, которое не установлено».Другой переключатель находится рядом с «классическим» текстовым полем для условия.Точки останова, которые не работают, имеют только текстовое поле для условия.Я не могу найти документацию для этого.Мои вопросы: что заставляет меня создавать один вид точки останова и другой?Это ошибка?(Только рабочий, с переключателями должен быть произведен?).Это мне не понятно.Что означает текст: «Использовать родительское условие точки останова, которое не установлено»?Что такое родительская точка останова?Почему они - когда работают - производятся парой?На самом деле, установка рабочей точки останова кажется мне случайной.У кого-нибудь есть такие же проблемы?

1 Ответ

0 голосов
/ 08 марта 2019

Дисплей точки останова XCode отражает то, как lldb обрабатывает точки останова под крышками.

Точки останова lldb состоят из двух частей.

Первая часть - это «спецификация точки останова» - например, «строка 12 файла foo.c» или «символы с именем foo».lldb также позволяет использовать более широкие спецификации поиска, такие как «любое имя функции, совпадающее с регулярным выражением» (break set -r) или даже «любая строка исходного кода, совпадающая с заданным регулярным выражением» (break set -p), хотя Xcode не имеет пользовательского интерфейса для этих любителейединицы.

Корневой узел точки останова на дисплее Xcode представляет спецификацию точки останова.

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

for (i = foo(); i < bar(); i += baz()) {

, поскольку эта исходная строка вносит код, который запускается в трех различных частях оценки цикла for.

Итакдочерние узлы каждого списка точек останова в XCode показывают отдельные местоположения в сгенерированном коде, которые соответствуют спецификации точки останова.

Если точка останова не имеет узлов местоположения, это означает, что lldb не может найти места в вашем кодеэто соответствует спецификации.Иногда вы можете увидеть это более четко, если вы выполните команду:

(lldb) break list

в консоли lldb.

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

...