如何在 Java 类中找到使用特定方法的所有执行路径?

Posted

技术标签:

【中文标题】如何在 Java 类中找到使用特定方法的所有执行路径?【英文标题】:How do I find all execution paths that use a certain method in a Java class? 【发布时间】:2013-02-12 20:42:17 【问题描述】:

给定某个java方法,我需要确定从入口类到目标方法的所有执行路径。

例子:

目标方法:MyClass.myMethod()

执行路径

EntryClass --calls--> Class1.method1() --calls--> Class2.method1() --calls--> Class2.method2() --calls--> MyClass.myMethod()

EntryClass --calls--> Class1.method1() --calls--> Class3.method1() --calls--> Class2.method2() --calls--> MyClass.myMethod()

EntryClass --calls--> Class3.method1() --calls--> MyClass.myMethod()

等等

是否有任何可用的工具可以在我的代码库上运行静态分析以确定所有这些代码执行路径?

【问题讨论】:

您是否考虑过该方法也可以通过反射来调用? 不知道有没有工具可以做到这一点。 AFAIK 我将光标放在 Eclipse 中的方法定义中,然后按 Ctrl + Alt + H 【参考方案1】:

eclipse 的调用层次是否符合要求?它显示一个方法的所有调用者或方法的所有被调用者的树(它只显示源代码可用的调用者或被调用者,而不显示反射进行的调用)。

要打开它,只需单击方法名称,然后按 CtrlAltH

【讨论】:

Intellij IDEA 相同:导航 |调用层次结构。【参考方案2】:

FindBugs 是由马里兰大学撰写的。这是

使用静态分析来查找 Java 代码中的错误的程序

Cobetura 是一个

计算测试访问的代码百分比的免费 Java 工具。它可用于识别您的 Java 程序的哪些部分缺少测试覆盖。

在我工作的一位高级开发人员进行代码审查之前,我从未听说过它们。您可以将它们安装为 Maven 插件。运行命令

mvn 网站

运行您的代码覆盖率报告。我不能告诉你更多关于实际配置它的信息,因为我没有这样做。他们的文档应该是相当不错的。

【讨论】:

以上是关于如何在 Java 类中找到使用特定方法的所有执行路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何在特定的 <ul> 类中找到所有 <li>?

如何使用 Maven 运行特定包中的所有测试?

Java - 如何找到在 Student 类中编写方法的得分最高的学生?

如何在抽象类中执行java方法?

java - 如何停止java执行程序类中的所有可运行线程?

mac os intellij如何快路查看一个java类的所有方法,结构