如何生成Java调用图

时间:2009-12-30 22:33:38

标签: java eclipse graph call-graph

我想分析和理解某个Java应用程序,我认为调用图非常有用。我如何生成一个?我正在使用Eclipse。

8 个答案:

答案 0 :(得分:14)

获取callstack

1)如果你可以 debug ,只需输入一个断点(双击代码左边缘)并等待它停止。如果您不在,请转到Debug Perspective,然后打开Call stack View / Panel。它有调用栈:)

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

获取方法参考

您可以通过右键单击“引用”,“工作区”来获取对方法的所有引用。它将搜索当前打开的项目中的所有调用。非常有用。

分析应用

(感谢那些已经回答过探查器选项的人)

Eclipse TPTP提供分析:

http://www.eclipse.org/tptp/home/project_info/general/whatisTPTP.php

答案 1 :(得分:7)

我遇到了完全相同的问题,所以我编写了java-callgraph套工具。使用它,您可以创建动态(运行时)调用图和静态调用图,前提是您拥有程序及其依赖项的jar文件。

答案 2 :(得分:4)

Netbeans profiler非常适合这个!!

  

分析功能包括CPU,   内存和线程分析也是如此   作为基本的JVM监控...

您还可以使用jconsole命令(部分jdk

  

它启动了一个图形控制台工具   这使您可以监控和管理   Java应用程序和虚拟机   在本地或远程机器上。

答案 3 :(得分:3)

使用Eclipse Profiler可能会得到你想要的东西。

答案 4 :(得分:2)

快速且脏,创建新的异常并打印堆栈跟踪。

Exception e = new Exception();
e.printStackTrace();

答案 5 :(得分:2)

你无法在eclipse中获得整个代码的图表。但是,您可以获取方法的调用者或被调用者的树视图。

在源代码中,右键单击感兴趣的方法名称,例如 main(String [] args),然后单击“打开调用层次结构”。 (在Windows上按Ctrl + Alt + H)

这将打开调用者层次结构(调用者层次结构)的树视图。可以选择查看Callee层次结构。

要复制到文本文件,请在“调用层次结构视图”中的节点上右键单击,然后单击“复制扩展层次结构”。

缺点:

  • 扩展所有树节点必须手动扩展(Shift +在Windows上重复点击右箭头)
  • 如果代码没有明显的起点,那么您必须为每个方法执行此操作

答案 6 :(得分:1)

我有时会使用Eclipse探查器。

答案 7 :(得分:1)

Thread.dumpStack()允许您输出当前调用堆栈,而不会抛出异常或使用调试器。这将输出到控制台。

您可以在代码的“热点”中调用dumpStack()来获取应用程序所需的调用堆栈。