XCode не останавливается на точке останова в методе, вызванном из LLDB

  • XCode 7.2.1
  • iPad Retina iOS 9.2 Симулятор

У меня есть несколько точек останова, установленных в определенном классе в проекте XCode. Все, что я обсуждаю ниже, происходит в этом одном файле класса.

Я установил точки останова на -(int16_t)areaNbr щелкнув по желобу, и не устанавливая никаких условий или чего-либо на них. Я подтвердил, что они существовали в отношении LLDB, запустив breakpoint list из приглашения LLDB.

Схема проекта настроена на отладку, а не на выпуск.

Я запускаю проект в симуляторе и останавливаюсь на точке останова другим методом, чем тот, о котором идет речь, и в этот момент я хочу перейти к приглашению LLDB и вызвать po [self areaNbr] и шаг за шагом areaNbr,

Пожалуйста, обратите внимание, поскольку это может быть весьма актуально, у меня нет кода в самом проекте, который вызывает
-(int16_t)areaNbr

Теперь я могу заставить это остановиться на моих контрольных точках -(int16_t)areaNbr если я добавлю некоторый код в проект, который вызывает метод.
Например, если я добавлю что-то вроде NSLog(@"... %d", [self areaNbr])

Я знаю, что проблема не имеет ничего общего с компиляцией метода просто потому, что ничего не вызывает его, потому что, если это правда, то мой вызов po [self areaNbr] не будет выплевывать результат в окно отладчика, как показано ниже. Таким образом, метод компилируется и, безусловно, распознается отладчиком как существующий для целей выполнения... только не для пошаговых целей.

FYI, [self area] возвращается "Area01"

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

призвание breakpoint list в LLDB возвращает следующее

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

1 ответ

Решение

По умолчанию lldb не останавливается на точках останова в вызываемом вручную коде. Большинство людей используют expr & expr -O -- т.е. po печатать значения и объекты и были раздражены, если они останавливались на точках останова, которые они установили для других целей.

Тем не менее, это легко контролировать, просто используйте:

(lldb) expr -i 0 -- [self areaNbr]

Тогда вы остановитесь на своей точке останова.

В этом примере я пропустил -O, который является частью печати объекта, так как, если вы просто хотите вызвать этот метод, вам, скорее всего, нет дела до вызова description на результат после вычисления выражения.

Вы можете увидеть все варианты оценки выражений, выполнив:

(lldb) help expr
Другие вопросы по тегам