Xcode Full Stack Trace

78

Während des Debuggens wird ohnehin eine vollständige Stapelverfolgung angezeigt, eine Liste der im Hauptthread aufgerufenen Methoden. Oder eine Möglichkeit, sie im Befehlsfenster zu drucken.

NaXir
quelle
Programmatisch können Sie callStackSymbols verwenden, wie Mihir es beschreibt. Natürlich können Sie auch in Xcode an einem Haltepunkt anhalten (oder einfach "Pause" drücken) und den Stapel in der linken Spalte untersuchen. (Aktivieren Sie immer einen Ausnahme-Haltepunkt.)
Hot Licks
1
(+1, um zu erkennen, dass das Untersuchen des Stapels wichtig ist. Viel zu wenige Leute, die mit Xcode beginnen, wissen dies zu schätzen.)
Hot Licks
Ich mache das gleiche, aber im Stack-Trace sehe ich nur 5 oder 6 Methodenaufrufe und danach auf 25 seine UIApplicationMain und auf 26 seine main. Ich kann die Methoden zwischen 6 und 25 nicht sehen. Ich möchte die vollständige Stapelverfolgung sehen.
NaXir
1
Ich habe es über nslog bekommen. danke Jungs
NaXir

Antworten:

81

Sie können den Stack-Trace im NSLog von drucken

NSLog(@"Stack trace : %@",[NSThread callStackSymbols]);

Bei einem Absturz können Sie neben dem Wort (lldb)Folgendes eingeben:

po [NSThread callStackSymbols]

Bearbeiten:

Für eine bessere Ausgabe auf der Swift-Konsole können Sie stattdessen die folgende Zeile verwenden:

Thread.callStackSymbols.forEach{print($0)}
Mihir Mehta
quelle
11
innerhalb von lldb kann es gedruckt werden mit: po [NSThread callStackSymbols]
Max MacLeod
Die Antwort wurde aktualisiert
Mihir Mehta
po Thread.callStackSymbols kehrt zurückcannot use dot operator on a type
pho_pho
141

Verwenden Sie den btBefehl in (lldb).

Nach einer Pause oder nach einem Absturz geben Sie einfach btin die Debug-Konsole ein.
Es wird die vollständige Stapelverfolgung gedruckt.

Beispielausgabe des Befehls bt

Alex Iceman
quelle
Toller Tipp zum Aufspüren eines Einschränkungsproblems nach dem Festlegen des symbolischen Haltepunkts.
Alex Walczak
Sie können auch die Thread-ID (im Debug-Bereich) angeben, um den Stapel dieses bestimmten Threads zu erfassen. Im Fall von Thread 42 würden Sie beispielsweise - "bt 42"
rivaldo4t
64

In Xcode 6 können Sie auf die Schaltfläche in der unteren linken Ecke des Fensters klicken, die die vollständige Stapelverfolgung anzeigt. Xcode 6 zeigt die vollständige Stapelverfolgung

Gong Pengjun
quelle
Diese Antwort ist in Xcode 11 immer noch aktuell, aber die Schaltfläche wurde leicht verschoben. ;)
Benutzer, der kein Benutzer ist
17

In Xcode 5 können Sie den Schieberegler am unteren Rand des Fensters verschieben, in dem die Stapelverfolgung angezeigt wird. Es steuert, wie viel von der getroffenen Spur angezeigt wird.

Schieberegler, der die Stapelverfolgung steuert

Sergey A. Novitsky
quelle
6
Wie macht man das in Xcode 6? Es gibt keinen Schieberegler mehr.
Programm
3
Dieser Schieberegler scheint in XCode6 entfernt worden zu sein ... Wenn jemand weiß, wie man das unter XCode6 macht, wären Sie mein Held.
Steazy
@Steazy Siehe Gong Pengjuns Antwort für Xcode 6-11 (oder möglicherweise später, 11.x ist derzeit aktuell)
Benutzer, der kein Benutzer ist
4

Sie können hinzufügen, breakpointbevor eine Ausnahme ausgelöst wird. Gehen Sie zuerst zu Breakpoint Navigator(cmd + 6). Klicken Sie in der unteren linken Ecke mit der Maus auf die Plus-Taste. ODER Sie können Instruments(/ Developer / Applications / Instruments) verwenden, um die Verwendung von zu erkennen zombie objects. Referenz

Und wenn Sie eine Haltepunktüberprüfung hinzufügen, wird das Bild von erstellt Xcode.

Geben Sie hier die Bildbeschreibung ein

Sie können die Stapelverfolgung mithilfe des Schiebereglers unten step overund overfür zeilenweise Protokolle erweitern.

danke hoffe das wird dir helfen

Buntylm
quelle