2008-12-16 9 views
8

Handhabung Ich habe mich gefragt, ob es etwas gibt (in Java-Welt) in der Lage eine Momentaufnahme des JVM aktuellen Stand mit den folgenden Funktionen zu nutzen:Automatisiertes Exception

  • es tun, während eine Ausnahme ausgelöst wird.
  • Erfassen Sie lokale Variablen, Argumente der Methode, etc.
  • Legen Sie es in eine handliche Datei, die verwendet werden kann, um in einer IDE die Situation in Ihrem Quellcode zu extrahieren oder zu reproduzieren.

Die zwei ersten Funktionen sind erforderlich (dritte wäre super). Und es muss für den produktiven Einsatz geeignet sein (Debugger haben also keine Chance).

Vor diesem bat ich durch das WWW gesucht haben (so lange wie möglich) und ich fand einige Hinweise:

  • Cajoon Interceptor: Wie in Dzone post heißt, es ist ein passives JVM Mittel, das die drei Anforderungen erfüllen! Aber es hat zwei Nachteile: Sie müssen dafür bezahlen und die Seite ist leer (vielleicht gibt es keine Chance, etwas zu bezahlen).
  • AviCode Intercept Studio: Cajoon's .NET-Äquivalent. Nur um einen Einblick zu geben.
  • JavaFrame: Ok, es ist ein Tweet, aber es zeigt auf einen verfügbaren SVN Repo, die den Quellcode (unter MIT-Lizenz) eines JVM-Agenten haben, der gut aussieht (ich werde es versuchen).

Also, vielleicht suche ich nach einer nicht existenten Lösung? Es ist nicht dringend, aber ich hatte diese Idee für ein Projekt und es wäre großartig, diesen "unbekannten" (?) Weg zu erkunden und etwas wirklich zu bekommen.

Es scheint klar zu sein, dass es sich um einen JVM-Agenten handeln würde (Ausnahmeereignis von JVMTI, für example).

Endlich habe ich den followin Absatz von Wikipedia's Exception Handling article hervorheben möchte:

In Runtime-Engine Umgebungen wie Java oder .NET, gibt es Tools, die, dass ein auf die Laufzeitmaschine und jede Zeit befestigen Ausnahme von Interesse auftritt, sie notieren Debugging Informationen, die im Speicher um die Zeit, die die Ausnahme ausgelöst wurde (Aufruf Stapel und Heap-Werte) vorhanden waren. Diese Tools heißen Automated Exception Handling oder Error Interception Tools und bieten 'root-cause' Informationen für Ausnahmen.

Das ist die Idee. Ich hoffe, jemand kann mir einen Einblick geben oder vielleicht in der Zukunft jemand von diesem bescheidenen Beitrag inspiriert werden :)

Vielen Dank!

+0

Ich bin neugierig zu wissen, wenn Sie andere Lösungen gefunden haben. – dsatish

Antwort

2

Ich gucke JavaFrame und es scheint ein guter Ausgangspunkt. Installieren Sie einfach Apache Ant, tut ant im javaframe Verzeichnis und starten Sie die Testsuite (im Test-Verzeichnis) mit:

LD_LIBRARY_PATH=../build/native/ java -agentlib:frameintrospect -classpath ../build/classes/:. org.thobe.frame.Test 

Es keinen lokalen Variable nicht bekommen, aber es versucht. Also, wie gesagt, es kann ein Ausgangspunkt sein. Ich hoffe, dass ich mehr über seine Verwendung erfahren kann, aber keine Zeit und keine Dokumentation (es gibt viele Projekte mit dem Namen JavaFrame) sind schlechte Umstände.

Vielleicht kann es eines Tages wieder getan werden. Wieder ja. Es gab Cajoon, es sah vielversprechend und glänzend aus, aber seine Website ist nicht verfügbar und es gibt keine Spur von herunterladbaren Gläsern, die man ausprobieren könnte.

Danke an alle!

PD .: Gerade als Referenz, einige Links fand ich während der Erforschung:

0

nicht sicher, ob dies in einer Produktionsumgebung durchführbar ist, aber es ist die Allwissende Debugger:

Was, wenn Ihr Debugger gehen könnte „in der Zeit zurück gehen?“ Würde das das Debuggen erleichtern? Durch einfaches Aufzeichnen aller Variablenzuordnungen ist es möglich, dies im Wesentlichen zu tun.Dies ist die grundlegende Idee für das allwissende Debugging. Der erstaunliche Teil ist, dass auf diese Weise signifikant große Programme debuggt werden können - Ant, JUnit, der Debugger selbst.

http://www.lambdacs.com/debugger/

+0

Ich habe es auch gefunden, aber ich denke nicht, dass es eine geeignete Lösung für eine Produktionsumgebung sein kann, weil es scheint, dass Sie damit Ihr Programm ausführen müssen. Stellen Sie es sich mit einem JBoss AS vor ... Danke trotzdem;) – Dario

1

Vielleicht möchten Sie in die Arbeit suchen, die NetBeans in Bezug auf automatisierte Verwendung Protokollierung getan hat: http://wiki.netbeans.org/UsageLoggingSpecification.

Wie zum Ausgeben von lokalen Variablen, würde ich mir vorstellen, dass Sie einfach einen Debugger verwenden könnten, wie der, den bajafresh4life erwähnt.

+0

Danke, gibt es eine Möglichkeit, einen Debugger aufzurufen, während eine Ausnahme behandelt wird? Das Ziel ist es, ein Image des JVM-Zustands on-the-fly zu bekommen, gerade in dem Moment, in dem eine Ausnahme auftritt. Auf diese Weise könnten Sie sehen, welche Werte die lokalen Variablen hatten, auch statische Klassen und Argumente der Methode. – Dario

1

Vielleicht könnte es mit AspectJ getan werden?

+0

Vielleicht, aber keine lokalen Variablen Dump zur Verfügung, denke ich, weil Aspekte ihren eigenen Umfang oder Kontext (vielleicht habe ich mich geirrt). – Dario