【问题标题】:Generating Method Call Diagram in Java Project [closed]在 Java 项目中生成方法调用图
【发布时间】:2020-12-30 14:08:57
【问题描述】:

我有一个 java 项目的源代码,我想跟踪每个方法,该方法内部调用了什么方法。

示例:

foo(){}
bar(){}
bar2(){
   bar();
}
foo2(){
   bar();
   bar2();
}

main(){
   foo2();
}

结果会是这样的:

main
|_foo2
  |_bar
  |_bar2
    |_bar

任何附加组件或插件都可以,因为它是公司的内部项目,我希望这些工具是离线的。对于结果,不一定是那样,图形什么的都可以。

添加一些信息:

  1. 我无法编辑代码
  2. 我无法运行代码
  3. 但是(也许)我可以将它们添加到 Eclipse IDE
  4. 项目是 WAR、EAR 或 JAR 类型

【问题讨论】:

  • 你能查到这些方法的代码吗?

标签: java trace auto-generate


【解决方案1】:

首先,如果您使用 Eclipse 作为您的 IDE,那么您可以右键单击一个方法并选择“打开调用层次结构” 然后eclipse显示所有调用所选方法的方法以及从所选方法调用的所有方法。

其次我们可以通过编程找到它。

即,通过使用 eclipse JDT 内部类,这些是 eclipse 用来显示谁调用该方法的类。

最初我们需要导入以下两个类,

    import org.eclipse.jdt.internal.corext.callhierarchy.CallHierarchy;

    import org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper;

然后创建一个方法来获取调用者,并将所选方法作为输入。(请注意,这将是您的 API 类型方法)您应该从您的程序中调用此方法以查找哪些方法调用了什么..

【讨论】:

    【解决方案2】:

    如果它是一个没有其他框架的纯 Java 项目,一种方法是使用 AspectJ 拦截每个方法,并在 Thread 本地映射中放置一个条目,方法名称为 counter + 1。如果 main 是0,foo2 将是 1,barbar2 将是 2,依此类推。 请参阅 AspectJ 文档的 this section

    【讨论】:

    • 主要问题是我无法运行代码
    【解决方案3】:
    • 您只需要使用ajc 编译器而不是javac。它使您能够使用AspectJ。使用方面,您可以定义 Pointcut 并记录您需要的内容。
    • 我认为另一种选择是在所有调用之后分析堆栈跟踪。

    【讨论】:

      【解决方案4】:

      您可以使用 IntelliJ 中的 Code Iris 之类的插件

      【讨论】:

      • Code Iris 提供了正确的图表,但是当我看到它时,图表看起来很复杂哈哈
      • Code Iris 在处理大型代码库时非常有用。对于“hello world”,您可以使用 Eclipse 作为您的 IDE,然后您可以右键单击一个方法并选择“打开调用层次结构”。这可以达到您的目的。还有其他软件,例如“Source Insight”,也可以满足您的目的。
      • 源代码在jar或者ear或者别的什么的可以吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2019-07-17
      • 2012-02-23
      • 2011-09-04
      • 2011-03-11
      • 2017-08-10
      • 1970-01-01
      相关资源
      最近更新 更多