Gibt es eine Möglichkeit, Throwable.printStackTrace(PrintStream s)
den vollständigen Stapel-Trace zu drucken, damit ich über die letzte Zeile von hinaus sehen kann "... 40 more"
?
Gibt es eine Möglichkeit, Throwable.printStackTrace(PrintStream s)
den vollständigen Stapel-Trace zu drucken, damit ich über die letzte Zeile von hinaus sehen kann "... 40 more"
?
Du musst nicht; Diese Informationen sind an anderer Stelle in der Stapelverfolgung vorhanden. Aus den Dokumenten von printStackTrace()
:
Beachten Sie das Vorhandensein von Zeilen, die die Zeichen enthalten
"..."
. Diese Zeilen geben an, dass der Rest der Stapelverfolgung für diese Ausnahme mit der angegebenen Anzahl von Frames am unteren Rand der Stapelverfolgung der Ausnahme übereinstimmt, die durch diese Ausnahme verursacht wurde (die "einschließende" Ausnahme).Diese Abkürzung kann die Länge der Ausgabe in dem allgemeinen Fall, in dem eine umschlossene Ausnahme von derselben Methode ausgelöst wird, mit der die "verursachende Ausnahme" abgefangen wird, erheblich reduzieren.
Mit anderen Worten, die "... x more"
einzige wird nur in einer verketteten Ausnahme angezeigt und nur dann, wenn die letzten x
Zeilen der Stapelverfolgung bereits als Teil der Stapelverfolgung einer anderen verketteten Ausnahme vorhanden sind.
Angenommen, eine Methode fängt die Ausnahme Foo ab, umschließt sie mit der Ausnahmeleiste und löst die Leiste aus. Dann wird die Stapelspur von Foo gekürzt. Wenn Sie aus irgendeinem Grund die vollständige Ablaufverfolgung wünschen, müssen Sie nur die letzte Zeile vor der ...
Stapelverfolgung in Foo nehmen und sie in der Stapelverfolgung in der Leiste suchen. Alles unter dieser Zeile ist genau das, was in Foos Stack-Trace gedruckt worden wäre.
...
ist das erste Bild, das sich unterscheidet. Es wird jedoch zumindest in derselben Klasse sein, was hilft, es zu finden.Erraten Sie schnell eine Methode für Sie.
quelle
Nehmen wir den Stack-Trace aus der Dokumentation von Throwable.printStackTrace () :
Die Ursachen werden von der am meisten verschachtelten unten (der "Grundursache") bis zu der Ursache angezeigt, zu der die gedruckte Stapelverfolgung gehört.
In diesem Fall ist die Grundursache
LowLevelException
, welche UrsacheMidLevelException
, welche UrsacheHighLevelException
.Um den vollständigen Stack-Trace zu erhalten, müssen Sie sich die Frames der einschließenden Ausnahme (und ihrer einschließenden Ausnahmen) ansehen:
Wenn wir also den vollständigen Stack-Trace von erhalten
LowLevelException
möchten, würden wir Folgendes tun:MidLevelException
)MidLevelException
(HighLevelException
) an.Ihre vollständige Stapelverfolgung sieht dann folgendermaßen aus:
Randnotizen:
Es kann Fälle geben, in denen keine Frames aufgelistet sind, z.
Dies kann passieren, wenn die Ursache in derselben Zeile liegt :
new HighLevelException(new MidLevelException())
. Lassen Sie sich davon nicht verwirren, der oben beschriebene Ansatz funktioniert immer noch. Es gibt nur keine Frames, die von der Ausnahme verwendet werden können. Fahren Sie mit dem einschließenden fort.In einigen Fällen können Sie sich das Zählen ersparen, indem Sie sich den ersten Frame ansehen, der nicht ausgelassen wurde (die obige Zeile
... X more
). Wenn Sie wissen, welche Methoden die Methode in dieser Zeile aufrufen, können Sie direkt nach den Aufrufern in den Frames der einschließenden Ausnahme suchen:quelle