如何生成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()来获取应用程序所达到的调用堆栈。