2009-12-01 4 views
12

Ich bin mir nicht sicher, wie nützlich das wäre, aber ich dachte, es könnte nett sein, die Objekte in meinem Programm zu visualisieren und welche Objekte von wo aus referenziert werden. Ich vermute, es würde einige Daten generieren, die von einem Programm wie Graphviz verwendet werden würde. Gibt es irgendwelche Werkzeuge, die das tun, sonst wie schwer wäre es, das selbst zu tun? Im Idealfall würde dies für jedes beliebige Programm funktionieren, aber wenn nötig könnte ich einige Änderungen am Code vornehmen (zB einen dumpObjects() -Aufruf oder was auch immer)Gibt es Werkzeuge, um die Objekte in einem Programm zu visualisieren?

Ich bin daran interessiert dies für Java zu tun, aber wenn es da ist sind Lösungen für andere Sprachen, bitte posten auch diese.

+0

Ja, ich habe für so etwas wie dies in C# lange gewünscht; versuchte, daran zu arbeiten, aber es erforderte einen Profiler. In Java können Sie die relevanten Informationen über AOP generieren; C# hat dafür keine große Unterstützung. –

+0

Die Frage ist ziemlich alt, aber immer noch relevant. Solch ein Werkzeug wäre schön zu finden, warum einige Objekte nicht Müll gesammelt werden und Speicherlecks auflösen. Profiler sind in Ordnung, aber das Problem ist, dass der Stop auf 1 Ebene, der ganze Graph kann Ihnen helfen, Probleme zu finden, die in mehr als einer Ebene existieren. Ein Filter auf dem Objekt, der angezeigt wird, könnte helfen, es sauber und lesbar zu halten. – bracco23

Antwort

9

Ein Profiler können Sie sehen, welche Objekte zur Laufzeit erstellt werden. Dies ist die Ausgabe von JProfiler zum Beispiel:

jprofiler heap walker http://www.ej-technologies.com/products/jprofiler/images/screenshots/heap_walker_references_fsb.png

+0

JProbe ist ein anderer Profiler, der eine ähnliche Art von Speicherprofilierungsfunktion hat. Ich habe es vor ca. 10 Jahren benutzt, um Java-Code zu schreiben, der von Leuten geschrieben wurde, die fälschlicherweise dachten, dass es in Java keine Speicherlecks geben konnte. Um festzustellen, ob Sie an einem bestimmten Punkt einen "Schnappschuss" machen, führen Sie in Ihrem Programm eine Reihe von Operationen durch, die Sie für undicht halten und dann das Programm in den ursprünglichen Zustand zurückversetzen können. Alle Objekte, die nach dem Snapshot erstellt werden, auf den Objekte verweisen, die vor dem Snapshot erstellt wurden, sind möglicherweise undichte Objekte. –

0

nicht sicher, ob das ist, was Sie anstreben, aber Doxygen wird so ziemlich alles tun.

es wird einen Haufen von Compiling-Code und drehen Sie es in Cross-referenzierte HTML, RTF von PDF. abgeschlossen wird Aufruf Baum für jede Funktion und "referenziert von" für jede Variable

+1

Entschuldigung, ich meinte Objekte, die zur Laufzeit verwendet werden. – swampsjohn

2

Sun haben die VisualVM entwickelt, die Profilierung Speicher und Prozess umfasst. Es unterstützt auch Plugins für Technologien wie OSGi.

+0

Neuer funktionierender Link: https://visualvm.java.net/ – Jayesh

0

Für Sichtbarmachung Graphenstrukturen (einschließlich Objektgraphen), gibt es viele Tools basierend auf GraphViz: http://www.graphviz.org/

0

Es gibt die Object Graph Visualizer die Klassen und Objekte in 3D-Displays. Derzeit fehlt eine API, um die Initialisierung zu automatisieren, es sollte jedoch nicht zu schwierig sein, diese Funktionalität hinzuzufügen. Quellcode auch auf Github.

Edit: Es wird bereits in dieser Richtung offenbar geleistete Arbeit ist: https://eprints.hsr.ch/491/

OGV

Verwandte Themen