2013-06-21 8 views
7

Jedną z części dużej bazy kodu jest drukowanie dziwnych oświadczeń NSLog i próbuję wykryć, skąd się bierze. Czy istnieje sposób umieszczenia 1 punktu przerwania na początku każdego wywołania NSLog, aby sprawdzić, skąd jest wywoływany, zamiast ręcznie umieszczać punkty przerwania we wszystkich miejscach, które wywołują NSLog?Czy istnieje sposób ustawiania punktu przerwania na początku każdej instrukcji NSLog?

+0

Zdobądź DLog, globalne wyszukiwanie i zamień wszystkie wpisy NSLog. – Wain

+0

@Wain To nie zadziała, jeśli jakaś biblioteka binarna (np. UIKit) wywołuje 'NSLog'. –

+0

Prawdopodobnie zastąpiłbym makro NSLog moim własnym - jednym, który odwołuje się do haka punktu przerwania. –

Odpowiedz

2

Według this można ustawić tego rodzaju przerwania przez to w konsoli lldb:

breakpoint set --name NSLog 

Jednym ze sposobów, aby to zrobić przy użyciu Xcode może być umieścić punkt przerwania w funkcji main lub Ci AppDelegateapplicationDidFinishLaunchin (czytaj: tak szybko, jak to możliwe). Następnie należy uruchomić aplikację, a kiedy zatrzymuje się na wspomnianym przerwania, masz dostęp do konsoli lldb: wpisać powyższą linię i naciśnij Enter i drukuje lldb coś takiego:

Breakpoint 3: where = Foundation`NSLog, address = 0x32a3da08 

W tym momencie , wznowisz aplikację i zostanie ona zatrzymana ponownie po wywołaniu NSLog (zwróć uwagę na stos wywołań za pomocą Nawigatora Debug).

4

W przerwania telefonicznej (polecenia +) dodaje się (na dole, jest znak plus) symboliczny przerwania i wykorzystać NSLog jako symbol.

14

W Xcode 6:

Etap 1:
Na Navigator po lewej stronie, przejdź do przerwań Navigator (polecenie ⌘ +)

Krok 2:
Kliknij przycisk + w lewym dolnym rogu (Dodać nowy punkt przerwania),
następnie wybierz Dodaj Symboliczne Breakpoint ...:

screenshot for steps 1 and 2

Krok 3:
W Symbol, typ NSLog.

screenshot for step 3

Alternatywnie, można zrobić to samo w DebugBreakpointsTworzenie Symboliczny Breakpoint.

Fo Xcode 5, patrz this.

+0

To nie działa na XCode 6.2:/ –

5

Jeśli chcesz przerwać na pewnym wiadomości dziennika można użyć:

enter image description here

tym przykładzie przerwa na każdym rejestrze zawierającym słowo „ostrzeżenie”.

+0

Wielkie dzięki. Pomogło mi to rozwiązać problem, który miałem w swoim pytaniu http://stackoverflow.com/questions/41281627/finding-the-origin-of-xcode-debug-message – mylogon

+0

, aby zapisać ponowne wpisywanie, oto ciąg: '[ NSString *) $ r0 containsString: @ "Warning"] ' –

Powiązane problemy