15

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

4

8 回答 8

14

获取调用堆栈

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

于 2009-12-30T22:43:30.613 回答
10

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

于 2012-05-18T08:06:00.877 回答
4

Netbeans 分析器对此非常有用!

分析功能包括 CPU、内存和线程分析以及基本的 JVM 监控......

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

它启动一个图形控制台工具,使您能够监视和管理本地或远程机器上的 Java 应用程序和虚拟机。

于 2009-12-30T23:03:58.640 回答
3

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

于 2009-12-30T22:36:39.300 回答
2

又快又脏,创建一个新异常并打印堆栈跟踪。

Exception e = new Exception();
e.printStackTrace();
于 2009-12-30T22:38:12.310 回答
2

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

在源代码中,右键单击感兴趣的方法的名称,例如main(String[] args),然后单击 Open Call Hierarchy。(在 Windows 上为 Ctrl+Alt+H)

这将打开调用者层次结构的树视图(调用者层次结构)。有一个选项可以查看被调用者层次结构。

要复制到文本文件,请右键单击Call Hierarchy 视图中的节点,然后单击 Copy Expanded Hierarchy。

缺点:

  • 展开所有树节点必须手动展开(在 Windows 上重复点击右箭头)
  • 如果代码没有明显的起点,则必须对每种方法都执行此操作
于 2014-06-10T17:12:04.977 回答
1

我有时会使用 Eclipse 分析器。

于 2009-12-30T22:38:13.213 回答
1

Thread.dumpStack() 允许您在不抛出异常或使用调试器的情况下输出当前调用堆栈。这将输出到控制台。

您可以在代码的“热点”中调用 dumpStack() 以获取应用程序为达到该点而使用的调用堆栈。

于 2011-02-14T04:37:28.230 回答