Lldb точка останова для всех методов в объекте класса c

Как я могу автоматизировать установку точки останова для всех методов класса Objective C с помощью lldb?

Это полезно для изучения поведения сложного унаследованного класса. Я использую Xcode (включая lldb) для разработки iOS, и громоздко вручную проходить через (большой) файл в Xcode и щелкать по каналу рядом с каждым методом для установки точек останова.

Ответ 1

Один из вариантов - использовать контрольные точки регулярных выражений.

breakpoint set -r '\[ClassName .*\]$'

Вы можете играть с регулярным выражением в соответствии с вашими потребностями.

Команда создаст точку останова, которая останавливается на всех методах, реализованных этим классом. Тем не менее, не будет точек останова на методах, унаследованных от суперклассов.

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

br s -r '\[UIViewController .*\]$' -c '(BOOL)[(id)$arg1 isKindOfClass:[CustomVC class]]'

Для x86 измените (id)$arg1 на *(id*)($ebp+8).

Наконец, если вы действительно хотите узнать о потоке управления через различные классы, проверьте dtrace. Это, вероятно, больше подходит для этого, чем отладчик.

Ответ 2

br se -f FooViewController.m -p '^@property|^ *- *\('

"br se" сокращен для "набора точек останова", передайте свое собственное имя файла аргументу -f, а аргумент -p является грубым регулярным выражением для свойств и методов в Objective C.

Предостережения: Это не работает для файлов .h, поэтому, если у вас есть свойства, объявленные в заголовке, который вы хотите посмотреть, вам может потребоваться установить точки наблюдения на их экземпляр поддержки переменные.

Это лучшее решение, которое я нашел до сих пор. Если вы считаете, что они будут полезны, отправьте альтернативные решения.