Дисплей точки останова 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, где условие не выполняется, поэтому код для этих строк не выдается.Мне нужно больше подробностей, чтобы знать, почему ваши конкретные точки останова не разрешаются.