2012-03-26 12 views
3

Ich benutze Eclipse, um Java-Code zu schreiben. Wenn ich etwas Code debugge, kann ich einen Haltepunkt setzen und folgen, während der Code durch jede der Funktionen geht, oder ich kann zurückverfolgen. Ich kann mir auch die Anrufhierarchie oder die Referenzen ansehen, um eine Idee zu bekommen. Aber das ist nicht genug.Multi-Thread zeitbasierte Anrufhierarchie

Ich möchte eine Art zeitbasierte Visualisierung dessen haben, was jeder Thread während des Prozesses macht ... von "Punkt A" (Drücken einer Schaltfläche auf der Benutzeroberfläche) zu "Punkt B" (das Ergebnis erhalten). Ich möchte sehen, welche Klassen/Methoden in welcher Reihenfolge aufgerufen wurden. Ich möchte einen guten Weg, um zu visualisieren, welche Art von Ausgabe von einer Methode kommt und in eine andere Methode gehen, die einen neuen Prozess auslöst ... usw.

Ist für diese Art der Visualisierung nur ein Profiler verfügbar? Grundsätzlich möchte ich ein Aktions- oder Ablaufdiagramm erstellen. Gibt es ein Plugin oder eine App, die so etwas generieren können?

Edit: Hier ist ein Beispiel für das, was ich denke ... zumindest visuell: essmodel.sourceforge.net/index.html Es hat einige fließen, wo der Code führt. Aber ich denke, das ist nur eine statische Übersicht darüber, welche Klassen zu anderen Klassen führen und welche Ein-/Ausgabeoptionen verfügbar sind. Ich würde den Fluss basierend auf einem bestimmten Fall abbilden wollen.

+0

was denkst du über AOP, etwas wie aspectj? Fangen Sie die gewünschten Methodenaufrufe ab und protokollieren Sie, was Sie möchten. – Ron

Antwort

0

Ich glaube, mit einem Profiler wird Ihre beste Option sein. Kennen Sie VisualVM? Es kommt mit dem JDK (suchen Sie nach "jvisualvm.exe" in Ihrem bin-Verzeichnis Ihres JDKs) und ist in der Lage, lokale virtuelle Maschinen automatisch zu profilieren, ebenso wie entfernte Maschinen, wenn sie richtig konfiguriert sind. Und es gibt einen ziemlich glatten Überblick über die laufenden Threads und den Code, in dem sie ihre Zeit verbringen, also denke ich, dass Sie leicht tun könnten, was Sie brauchen. Und das Beste von allem, es ist kostenlos :)

Wie ich schon sagte, ist lokale Profilerstellung ein Kinderspiel. Sie führen nur JVisualVM.exe Standalone aus, und es werden alle Java-Prozesse automatisch gefunden, die auf dem lokalen Rechner laufen (Sie können sie einfach aus einem Menü auswählen, das Ihnen VisualVM im Voraus zur Verfügung stellt). Wenn Sie aus der Ferne ein Profil erstellen möchten, legen Sie die folgenden VM Argumente für was auch immer es ist, dass Sie laufen:

-Dcom.sun.management.jmxremote.port=[0-65535] 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

Dann innerhalb VisualVM, verwenden Sie den Hostnamen des Computers Remote-JVM läuft auf und Sie den Port konfiguriert im ersten VM-Argument oben.

+0

visualVM verfügt nur über kumulierte Callstack-Informationen ohne chronologische Informationen, nicht über die zeitaufgelöste Ansicht, die für die Frage erforderlich ist. –

+0

Ich dachte an etwas mehr visuelle wie folgt: http://essmodel.sourceforge.net/index.html Es hat einige Strömung wo der Code führt. Aber ich denke, das ist nur eine statische Übersicht darüber, welche Klassen zu anderen Klassen führen und welche Ein-/Ausgabeoptionen verfügbar sind. Ich würde es basierend auf einem bestimmten Fall zuordnen wollen. – user701273

3

JProfiler bietet eine solche Ansicht, es ist die „Call-Tracer“ genannt:

enter image description here

Es ist wichtig, die Filter zu beschränken sehr vorsichtig, um nicht zu viele Daten aufzeichnen.

Haftungsausschluss: Meine Firma entwickelt JProfiler.