Ich möchte eine bestimmte Java-App analysieren und verstehen, und ich denke, ein Call-Graph wäre sehr nützlich. Wie erzeuge ich einen? Ich benutze Eclipse.So generieren Sie ein Java-Call-Diagramm
Antwort
Aufrufliste Erste
1) Wenn Sie können Debug die Anwendung einfach einen Haltepunkt setzen (Doppelklick auf den linken Rand des Codes) und es warten zu stoppen. Wechseln Sie zur Debugperspektive, wenn Sie nicht dort sind, und öffnen Sie die Ansicht/Panel des Aufrufstapels. Es hat den Call-Stack :)
2) Wenn Sie diese Stack-Trace irgendwo eine Ausnahme verwenden drucken möchten:
Exception aux = new Exception("I'm here"); // not for throwing!
aux.printStackTrace(); // if you want it in stdout
oder
Exception aux = new Exception("I'm here"); // not for throwing!
StringWriter sw = new StringWriter();
aux.printStackTrace(new PrintWriter(sw));
String result = sw.toString(); // if you want it in a string
Gewinnung Methode verweist
Sie können alle Verweise auf eine Methode abrufen, indem Sie mit der rechten Maustaste auf Verweise, Arbeitsbereich klicken. Es wird alle Berufungen in Ihren aktuellen offenen Projekten suchen. Sehr, sehr nützlich.
Profil eine App
(dank denen, die den Profiler Option geantwortet hatte)
Eclipse-TPTP bietet Profilierung:
http://www.eclipse.org/tptp/home/project_info/general/whatisTPTP.php
Mit der Eclipse Profiler können Sie bekommen, was Sie wollen.
Dieses Projekt wird von Eclipse TPTP überschrieben. Ich füge seinen Link zu meiner Antwort hinzu (aber ich gebe +1) – helios
Schnell und schmutzig, erstellen Sie eine neue Ausnahme und drucken Sie den Stacktrace.
Exception e = new Exception();
e.printStackTrace();
Ich denke, er möchte die Daten visualisieren, nicht nur die Stack-Trace. –
@Kristopher Dann ist es ein Debugger, den er wirklich braucht. – HeDinges
Ich benutze manchmal den Eclipse Profiler.
Netbeans profiler ist sehr gut für dieses !!
Die Profilierungsfunktionen umfassen CPU, Speicher und Threads sowie als Basis JVM Monitoring Profilierungs ...
Sie auch jconsole Befehl (Teil des JDK)
verwenden könnenEs startet ein grafisches Konsolenwerkzeug , mit dem Sie Java-Anwendungen überwachen und verwalten können virtuelle Maschinen auf einer lokalen oder Remote-Maschine.
Mit Thread.dumpStack() können Sie den aktuellen Aufrufstapel ausgeben, ohne eine Ausnahme auszulösen oder einen Debugger zu verwenden. Dies wird an die Konsole ausgegeben.
Sie könnten dumpStack() in "hotspots" Ihres Codes aufrufen, um den aufrufenden Stack zu erhalten, den die Anwendung benötigte, um an diesen Punkt zu gelangen.
Ich hatte genau das gleiche Problem, also habe ich die java-callgraph Suite von Tools geschrieben. Damit können Sie sowohl dynamische (Laufzeit-) Call-Graphen als auch statische Call-Graphen erstellen, vorausgesetzt, Sie haben die JAR-Dateien des Programms und seiner Abhängigkeiten.
Sie können kein Diagramm für den gesamten Code in Eclipse erhalten. Sie können jedoch eine Baumansicht von Anrufern oder Anrufern für eine Methode abrufen.
Im Quellcode, auf den Namen eines Verfahrens zum Interesse der rechten Maustaste, sagen main (String [] args), dann auf Hierarchie Open Call klicken. (Strg + Alt + H unter Windows)
Dies öffnet eine Baumansicht der Aufruferhierarchie (Caller Hierarchy). Es gibt eine Option zum Anzeigen der Aufrufhierarchie.
in eine Textdatei zu kopieren, Rechtsklick auf einem Knoten in der Anruf Hierarchieansicht und klicken Sie auf Copy Expanded Hierarchie.
Nachteile:
- alle Baumknoten Erweiterung manuell erweitert getan müssen (Shift + Pfeil nach rechts tippen wiederholt auf Windows)
- , wenn es auf den Code nicht offensichtlich Ausgangspunkt ist, werden Sie zu tun haben, Dies für jede Methode
Es gibt auch eine 'Thread # dumpStack()', die über 'new Exception()' bevorzugt wird. – BalusC
Danke Jungs. Ich habe TPTP benutzt, was für meine Zwecke nicht schlecht ist. – Guy