Java-Post-Mortem-Debugging?

8

Ist es möglich, eine Post-Mortem (oder Post-Exception) -Debugging-Sitzung in Java zu haben? Was wären die Problemumgehungen (wenn es dafür noch keine Lösung gibt)?

    
Geo 24.11.2008, 17:26
quelle

3 Antworten

4

Sie können den Debugger an einen Java-Prozess anhängen und einen bestimmten Haltepunkt festlegen Ausnahme wird empfangen. Ist das was du brauchst?

Von Ссылка

  

Wenn eine Ausnahme auftritt   Es gibt nirgends eine Fanganweisung   den Java-Stack eines Java-Programms   Die Laufzeitumgebung erstellt normalerweise eine Ausnahme   verfolgen und beendet. Beim Laufen unter   jdb ist diese Ausnahme jedoch   als nicht wiederherstellbar behandelt   Haltepunkt und jdb stoppt bei der   beleidigende Anweisung. Wenn diese Klasse   wurde mit der Option -g kompiliert,   Instanz und lokale Variablen können sein   gedruckt, um die Ursache des zu bestimmen   Ausnahme.

Diese Art von Haltepunkten kann mit jeder IDE wie Eclipse festgelegt werden. Mit Eclipse können Sie auch einen Haltepunkt für einen bestimmten Ausnahmetyp festlegen, auch wenn er im normalen Code gefangen ist.

Wenn Sie so etwas wie einen Server mit mehreren Threads ausführen und einer der Threads, die einen Client bedienen, eine unbehandelte Ausnahme auslöst, können Sie den Debugger überprüfen und sehen, was passiert. Ich denke nicht, dass dies etwas für die Produktion ist, aber es hilft definitiv beim Testen.

Die Anwendung muss nicht vom Debugger ausgeführt werden, aber sie kann mit den Debugoptionen als Argumente gestartet werden:

%Vor%

Die Anwendung wird normal ausgeführt, wechselt jedoch in den "interpretierten" Modus, wenn ein Haltepunkt erreicht wird, zumindest in moderneren Versionen der JVM. So ist die Leistung nicht betroffen.

Lesen Sie den Abschnitt über Full-Speed-Debugging für HotSpot VM

  

Full-Speed-Debugging

     

Die Java HotSpot-VM wird jetzt verwendet   Full-Speed-Debugging. In früheren   Version der VM, als Debugging war   aktiviert, das Programm wird mit ausgeführt   nur der Dolmetscher. Jetzt, die volle   Leistungsvorteil von HotSpot   Technologie steht Programmen zur Verfügung,   sogar mit kompiliertem Code. Das verbessert   Leistung ermöglicht lange Laufzeit   Programme, die einfacher zu debuggen sind.   Es ermöglicht auch das Testen, um fortzufahren   Vollgas. Sobald es ein ist   Ausnahme startet der Debugger mit   volle Sichtbarkeit für Quellcode.

    
Mario Ortegón 24.11.2008, 17:52
quelle
4

Soweit ich weiß, müssen Sie auf Java 7 für eine offizielle API warten - siehe Ссылка .

In der Zwischenzeit können Sie Exception ersetzen (ersetzen Sie die Basisklasse, injizieren Sie den Code über die Instrumentierung usw.), um Ihre Daten zu behalten. Beachten Sie jedoch, dass der ClassLoader ClassNotFoundException regelmäßig auslöst (jedes neue geladene Paket). Auf diese Weise hätten Sie eine Menge Kontrolle, ohne Ihren Basiscode ändern zu müssen.

    
Ran Biron 24.11.2008 17:58
quelle
4

Ich bin ein Lösungsarchitekt für Replay-Lösungen. Sie bieten eine "Zeitmaschine" für Java-Anwendungen. Sie können eine Anwendung während der Ausführung aufzeichnen (z. B. in einer QA-Umgebung) und dann die Aufzeichnung auf Ihrem Entwicklungscomputer wiedergeben. Sie benötigen keinen Zugriff auf die Datenbank, Konfigurationen usw. Sie benötigen lediglich die ReplayDIRECTOR-Lösung, und Sie können das Problem in den freundlichen Grenzen Ihrer IDE beheben. Probleme, die wiederholt werden können, reichen von Konfigurationsproblemen, Datenbankausnahmen bis zu Threading-Problemen. Schau es dir an:

Ссылка

    
Zahur 22.04.2009 21:55
quelle

Tags und Links