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.
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.
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: