如何生成Java调用图
我想分析和理解某个Java应用程序,我认为调用图非常有用。 我如何生成一个? 我正在使用Eclipse。
获得callstack
1)如果你可以调试应用程序只需设置一个断点(双击代码的左边缘)并等待它停止。 如果您不在,请转到Debug Perspective,然后打开Call stack View / Panel。 它有调用堆栈:)
2)如果要在某处打印此堆栈跟踪,请使用Exception:
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
获取方法参考
您可以通过右键单击“引用”,“工作空间”来获取对方法的所有引用。 它将搜索当前打开的项目中的所有调用。 非常有用。
分析应用程序
(感谢那些已经回答过探查器选项的人)
Eclipse TPTP提供分析:
http://www.eclipse.org/tptp/home/project_info/general/whatisTPTP.php
我有完全相同的问题,所以我编写了java-callgraph工具套件。 使用它,您可以创建动态(运行时)调用图和静态调用图,前提是您拥有程序及其依赖项的jar文件。
Netbeans profiler非常适合这个!!
分析function包括CPU,内存和线程分析以及基本的JVM监控……
你也可以使用jconsole命令( jdk的一部分 )
它启动了一个图形控制台工具,使您可以在本地或远程计算机上监视和管理Java应用程序和虚拟机。
使用Eclipse Profiler可以获得您想要的。
快速和脏,创建一个新的exception并打印堆栈跟踪。
Exception e = new Exception(); e.printStackTrace();
你无法在eclipse中获得整个代码的图表。 但是,您可以获取方法的调用者或被调用者的树视图。
在源代码中, 右键单击感兴趣的方法的名称,例如main(String [] args) ,然后单击“打开调用层次结构”。 (在Windows上按Ctrl + Alt + H)
这将打开调用者层次结构(调用者层次结构)的树视图。 可以选择查看Callee层次结构。
要复制到文本文件,请右键单击 “调用层次结构”视图中的节点,然后单击“复制扩展层次结构”。
缺点:
- 扩展所有树节点必须手动扩展(Shift +在Windows上重复点击右箭头)
- 如果代码没有明显的起点,则必须为每个方法执行此操作
我有时会使用Eclipse分析器。
Thread.dumpStack()允许您输出当前的调用堆栈,而不会抛出exception或使用调试器。 这将输出到控制台。
您可以在代码的“热点”中调用dumpStack()来获取应用程序所达到的调用堆栈。