Точка останова lldb на всех методах в классе c
Как я могу автоматизировать установку точки останова для всех методов в классе Objective C, используя lldb?
Это полезно для изучения поведения сложного унаследованного класса. Я использую Xcode (включая lldb) для разработки под iOS, и неудобно вручную проходить (большой) файл в Xcode и щелкать желоб рядом с каждым методом, чтобы установить точки останова.
2 ответа
Одним из вариантов является использование контрольных точек регулярного выражения.
breakpoint set -r '\[ClassName .*\]$'
Вы можете поиграть с регулярным выражением в соответствии с вашими потребностями.
Команда создаст точку останова, которая останавливается на всех методах, реализованных этим классом. Однако на методах, унаследованных от суперклассов, не будет точек останова.
Чтобы получить методы для суперкласса, вы должны будете использовать условную точку останова. Например, если суперкласс UIViewController
Вы могли бы сделать что-то вроде:
br s -r '\[UIViewController .*\]$' -c '(BOOL)[(id)$arg1 isKindOfClass:[CustomVC class]]'
Для х86 поменяю (id)$arg1
в *(id*)($ebp+8)
,
Наконец, если вы действительно хотите узнать о потоке управления через различные классы, посмотрите dtrace. Это, вероятно, больше подходит для этого, чем отладчик.
br se -f FooViewController.m -p '^@property|^ *- *\('
"br se" - сокращение от "точка останова", передайте собственное имя файла -f
аргумент, а -p
Аргумент - это грубое регулярное выражение для свойств и методов в Задаче C.
Предостережения: это, кажется, не работает для .h
файлы, так что если у вас есть свойства, объявленные в заголовке, которые вы хотите просмотреть, то вам может потребоваться установить точки наблюдения для их переменных экземпляра резервного копирования.
Это лучшее решение, которое я нашел на данный момент, пожалуйста, опубликуйте альтернативные решения, если вы считаете, что они будут полезны.