我想分析和理解某个 Java 应用程序,我认为调用图会非常有用。如何生成一个?我正在使用 Eclipse。
8 回答
获取调用堆栈
1)如果您可以调试应用程序,只需放置一个断点(双击代码的左边距)并等待它停止。如果您不在那里,请转到调试透视图,然后打开调用堆栈视图/面板。它有调用堆栈:)
2)如果您想在某处打印此堆栈跟踪,请使用异常:
Exception aux = new Exception("I'm here"); // not for throwing!
aux.printStackTrace(); // if you want it in stdout
或者
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
获取方法引用
您可以通过右键单击、References、Workspace 来获取对方法的所有引用。它将搜索您当前打开的项目中的所有调用。非常非常有用。
分析应用程序
(感谢那些回答分析器选项的人)
Eclipse TPTP 提供分析:
http://www.eclipse.org/tptp/home/project_info/general/whatisTPTP.php
我遇到了完全相同的问题,所以我编写了java-callgraph工具套件。使用它,您可以创建动态(运行时)调用图和静态调用图,前提是您拥有程序及其依赖项的 jar 文件。
Netbeans 分析器对此非常有用!
分析功能包括 CPU、内存和线程分析以及基本的 JVM 监控......
您还可以使用jconsole命令(jdk 的一部分)
它启动一个图形控制台工具,使您能够监视和管理本地或远程机器上的 Java 应用程序和虚拟机。
使用Eclipse Profiler可能会得到你想要的。
又快又脏,创建一个新异常并打印堆栈跟踪。
Exception e = new Exception();
e.printStackTrace();
您无法在 Eclipse 中获得整个代码的图表。但是,您可以获得方法的调用者或被调用者的树形视图。
在源代码中,右键单击感兴趣的方法的名称,例如main(String[] args),然后单击 Open Call Hierarchy。(在 Windows 上为 Ctrl+Alt+H)
这将打开调用者层次结构的树视图(调用者层次结构)。有一个选项可以查看被调用者层次结构。
要复制到文本文件,请右键单击Call Hierarchy 视图中的节点,然后单击 Copy Expanded Hierarchy。
缺点:
- 展开所有树节点必须手动展开(在 Windows 上重复点击右箭头)
- 如果代码没有明显的起点,则必须对每种方法都执行此操作
我有时会使用 Eclipse 分析器。
Thread.dumpStack() 允许您在不抛出异常或使用调试器的情况下输出当前调用堆栈。这将输出到控制台。
您可以在代码的“热点”中调用 dumpStack() 以获取应用程序为达到该点而使用的调用堆栈。