Was ist der einfachste Weg, um einen Stacktrace von einem Debugging-Ausdruck zu drucken? Oft möchten Sie während des Tests den Callstack kennen, der zu der Situation führt, die eine Debug-Nachricht provoziert.Wie kann ich in Java einen Stacktrace zu meinem Debugging-Ausdruck hinzufügen?
Antwort
Sie sollten die Ausnahme in einem try-catch-Block abfangen.
e.getStackTrace();
Das gibt StackTraceElement [] zurück, das Sie dann interpretieren können.
auch:
e.printStackTrace()
wird ... die stacktrace drucken.
einfach eine willkürliche Ausnahme zu schaffen funktioniert der Trick für mich:
System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();
Sie sollten jus t verwende Thread.getStackTrace(). – jjnguy
Ich glaube, dass diese Methode eine Warnung in einigen IDEs wie IntelliJ verursacht, da Sie eine Ausnahme erstellen, aber nicht werfen. Ich empfehle die Thread.getStackTrace() -Methode, die die gleiche Logik hat, aber vom Entwickler ausgeblendet ist. –
Thread.dumpStack() ist einfacher, wenn Sie es nur an stderr senden möchten (es wird vermieden, dass Sie die Stack-Trace-Elemente selbst durchlaufen müssen). –
Neben was @jjnguy sagte, wenn Sie nicht eine Ausnahme haben, können Sie auch Thread.getStackTrace() aufrufen.
Wenn Sie den Stack-Trace in einen String speichern wollen, dies zu tun;
String exception = "";
for (StackTraceElement element : e.getStackTrace())
exception += element.toString() + "\n";
Wo e ist natürlich eine Ausnahme.
Außerdem klingt es sehr seltsam, eine eigene Exception automatisch zu generieren, nur um einen Stack-Trace für ein Debug zu bekommen. Holen Sie Eclipse und verwenden Sie es Debug-Modus, es ist wirklich großartig.
Wenn Sie log4j
Exception e = new Exception();
log.error("error here", e);
verwenden die Stacktrace zu Ihrem Protokoll ausdrucken.
+1 für nicht mit stdout/stderr –
Nur weil ich es selbst benötigt.
Wie How do I find the caller of a method using stacktrace or reflection? durch Antwort inspiriert, können Sie den Call-Stack abrufen mit
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
Dann bearbeiten und drucken Sie/log, was Sie interessiert sind mehr Arbeit als mit Thread.dumpStack()
, aber flexibler.
einfach Um den aktuellen Stack-Trace zu stderr zu drucken, können Sie anrufen:
Thread.dumpStack();
, die sich nur Anrufe:
new Exception("Stack trace").printStackTrace();
Zur Ausgabe auf stdout statt Stderr passieren System.out
zu printStackTrace()
:
new Exception("Stack trace").printStackTrace(System.out);
- 1. Kann ich einen Linq-Compiler zu meinem Projekt hinzufügen?
- 2. Wie kann ich einen generierten Quellordner zu meinem Quellpfad in Gradle und IntelliJ hinzufügen?
- 3. Kann ich einen Stacktrace aus minimiertem Code mithilfe von Quellmaps in einen visuell lesbaren Stacktrace übersetzen?
- 4. Wie kann ich Listbox mit tkinter zu meinem Code hinzufügen
- 5. Kann ich hinzufügen, Tasten zu meinem Text in Confluence?
- 6. Wie kann ich Zeilennummerierung zu meinem Absatz hinzufügen?
- 7. Wie kann ich Bilder zu meinem Web per CSS hinzufügen
- 8. Wie kann ich Checkboxen dynamisch zu meinem Rails-Formular hinzufügen?
- 9. Kann ich in PowerShell einen detaillierten Ausnahme-StackTrace erhalten?
- 10. Wie kann ich Cookies in meinem Webbrowser-Steuerelement hinzufügen?
- 11. wie die vollständige Stacktrace in Java drucken
- 12. Wie kann ich den vollständigen StackTrace in Maven sehen?
- 13. Wie kann ich ein Level 2 in meinem Spiel hinzufügen?
- 14. Wie kann ich neue Rollen in meinem Fosusbundle hinzufügen?
- 15. Wie kann ich einer Sammelliste in meinem Modell Zeilen hinzufügen?
- 16. Wie kann ich einen Jabber-Eintrag zu meinem XMPP-Konto hinzufügen und abonnieren?
- 17. Wie kann ich meinem Listeneintrag ein Bild hinzufügen
- 18. Wie kann ich einen Standardwert zu einer RadComboBox hinzufügen?
- 19. Hinzufügen von Objekten zu meinem Inventar in Java
- 20. Wie kann ich einen (Piwik) Tracking-Code zu JavaDoc hinzufügen?
- 21. Hinzufügen von MouseListener zu meinem Objekt in Java
- 22. Wie kann ich meinem VPS-Server eine zusätzliche Site hinzufügen?
- 23. Wie füge ich einen Ressourcenordner zu meinem Java-Projekt in Eclipse hinzu
- 24. Holen Sie Objekte in Java StackTrace
- 25. Wie kann ich in meinem Untermenü in jQuery keine Pfeile zu Links hinzufügen?
- 26. Hinzufügen zu meinem neuen Zweig
- 27. Wie kann ich meinem eigenen Container View Controller in iOS5 einen Navigationscontroller hinzufügen?
- 28. Wie kann ich meinem EXISTING Xcode-Projekt Komplikationen hinzufügen?
- 29. Wie kann ich ein Kontrollkästchen in meinem Menüelement in meinem Fragment v4 hinzufügen?
- 30. Hinzufügen von SQLite-Treiberdateien zu Java-Verzeichnis auf meinem Mac?
Der Nachteil ist, dass dumpStack() nur zu stderr geht, und Sie können es nicht woanders senden, wie Sie mit einer Ausnahme oder Thread.getStackTrace() können. –
Verwenden Sie die Protokollierung. Das Drucken nach stdout/stderr sollte nur von Betriebssystemprogrammen und "Hello World" -Apps durchgeführt werden. –