2013-02-25 4 views
11

Rozplątuję kod spaghetti i jako ćwiczenie przechodzę przez aplikację od momentu jej uruchomienia, włamując się na applicationDidFinishLaunching i przechodzę.Jak mogę złamać cały symboliczny kod w Xcode 4.6?

Kiedy ta pierwsza metoda zwróci, podzielę się na zespół. Wiedza, kiedy przekroczyć próg i kiedy wkroczyć, to prawdziwy ból. Chcę, aby debugger zatrzymał się na wszystkich symbolizowanych kodach (tj. Kod widzę w Xcode - może to jest nazywane "user" code? Zasadniczo, bez kodu ramy/biblioteki.), Ale nie dbam o wewnętrzne metody Apple.

Poszukuję praktycznego odpowiednika ustawienia punktu przerwania w pierwszym wierszu (lub każdej linii) każdej metody i funkcji, którą napisałem (lub mój poprzednik).

Czy jest jakiś voodoo z LLDB, który to zrobi?

Odpowiedz

7

Jest to prosty sposób na ustawienie punktów na wszystkich modułach funkcji, z wyłączeniem jakiejkolwiek innej udostępnionej biblioteki (ramki Apple), zakładając, że produkt/moduł nazywa się «MojaApl», że byłoby:

breakpoint set -s MyApp -r . 

Ta zawiera jednak dowolną bibliotekę, do której masz statyczne powiązanie, co prawdopodobnie oznacza każdą bibliotekę, którą wprowadziłeś, ponieważ dynamiczne łączenie jest niedozwolone w sklepie App Store.

Jeśli masz tendencję do prefiksowania swoich klas, możesz zawęzić wyniki, dzieląc tylko te funkcje, które są częścią klas z tym prefiksem. Zakładając, że przedrostek jest „MA” można zrobić coś takiego:

breakpoint set -s MyApp -r ^[^A-Za-z]*MA 

która powinna obejmować większość swojego kodu.

+0

Doskonała odpowiedź, dziękuję życzliwie. W odniesieniu do innych, '-s' ogranicza punkty przerwania do współużytkowanej biblioteki, a' -r' wskazuje wyrażenie regularne pasujące do funkcji, które mają się włamać. – Swizzlr

+0

Główne punkty bonusowe, jeśli istnieje sposób na zignorowanie syntetyzowanych akcesorów właściwości. – Swizzlr