2015-04-16 16 views
11

Jak zautomatyzować ustawianie punktu przerwania na wszystkich metodach w klasie Objective C za pomocą lldb?Punkt przerwania lldb dla wszystkich metod w klasie cel c

Jest to przydatne do nauki zachowania skomplikowanej klasy dziedzictwa. Używam Xcode (w tym lldb) do projektowania iOS, i jest uciążliwe, aby ręcznie przejść przez (duży) plik w Xcode i kliknij rynnę obok każdej metody, aby ustawić punkty przerwania.

Odpowiedz

17

Jedną z opcji jest użycie punktów przerwania regex.

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

Możesz odtwarzać z regexp do własnych potrzeb.

Polecenie tworzy punkt przerwania, który zatrzymuje się na wszystkich metodach zaimplementowanych przez tę klasę na. Jednak nie będzie punktów przerwania metod odziedziczonych po nadklasach.

Aby uzyskać metody na nadklasie, musisz użyć warunkowego punktu przerwania. Na przykład, jeśli nadklasą jest UIViewController, można zrobić coś takiego:

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

za zmiany x86 (id)$arg1 do *(id*)($ebp+8).

Wreszcie, jeśli naprawdę chcesz poznać przepływ sterowania przez różne klasy, sprawdź dtrace. Prawdopodobnie bardziej do tego pasuje niż debugger.

+0

Jestem zdezorientowany, co masz na myśli przez '\ [ClassName (\ (. * \)). * \] $', Jednak '\ [FooViewController. * \] $' Zrobił mi tę sztuczkę. Podoba mi się również, że pomijanie $ powoduje również punkty przerwania na blokach. Wyróżnienie za łamanie metod nadklasy jest również przyjemne. Dzięki za wskazówki, a na pewno sprawdzę dtrace. – tboyce12

+0

Powinny być '?' Po '(\ (. * \))'. Ta część to dopasowywanie kategorii, np. '- [UIView (Geometria) setFrame:]'. Wyjmę to, ponieważ nie powinno to być konieczne. –

+0

Gdzie piszę to polecenie. Proszę zasugerować Na konsoli lub na terminalu lub w kodzie. – Chandni

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

"br se" jest skrótem od "punktu przerwania zestaw", przekaż swoją nazwę pliku do -f argumentu, a -p argument jest surowy regex do właściwości i metod w Celu C.

Ostrzeżenia : To nie działa dla plików .h, więc jeśli masz właściwości zadeklarowane w nagłówku, który chcesz obejrzeć, może być konieczne ustawienie punktów obserwacyjnych na ich zmiennych instancji kopii zapasowej.

To jest najlepsze rozwiązanie, które do tej pory znalazłem, proszę publikować alternatywne rozwiązania, jeśli uważasz, że będą pomocne.

Powiązane problemy