Java调用图的静态分析

问题描述 投票:22回答:5

我想要做的是扫描一组Java类,并从抽象类的特定方法跟踪所有方法调用,并在该上下文中,构建执行某些操作的所有代码的列表(在本例中,实例化)某个类的实例)。我想知道,行号和提供的参数。

我已经开始关注BCEL,但它似乎没有内置调用图形跟踪?我犹豫要写自己的,因为获得重载,类型签名和多态分派权可能是棘手的。

我一半期望存在一个工具或示例代码,但我还没有找到任何东西。我真的觉得我要重新发明一个轮子。但是,如果我这样做将是一个开源轮,可在GitHub上使用;-)

PS:你会发现现有的问题“How to Generator a Java Call Graph”,因为它听起来完全相同,但它根本不是我所需要的。

java static analysis call-graph
5个回答
6
投票

您可以使用java-callgraph工具套件为Java创建足够准确的静态和动态调用图。


5
投票

您可以尝试使用JavaDepend,它提供了依赖项和指标所需的许多功能,它还提供了一个类似SQL的CQL来请求您的代码库。


4
投票

烟灰应该让你轻松达到你想要的:http://www.sable.mcgill.ca/soot/

它可以完全自动构建精确的调用图。

你可以在这里找到所有必要的文件:http://www.sable.mcgill.ca/soot/tutorial/index.html

此外,还有一个活跃的Soot邮件列表。


4
投票

你可以使用DoxygenGraphviz。它易于安装和使用。


2
投票

听起来你想要一些可以访问抽象语法和完整符号表的东西。然后,根据抽象方法的每个实现方法(如符号表所示)的调用图中的函数的AST的自定义扫描使您有机会找到其类型是特定感兴趣类的新操作。

DMS Software Reengineering Toolkit是通用编译器技术,提供解析,AST构建/导航,符号表构建/导航,控制流,数据流和调用图构造的基本服务。 DMS有一个可选的Java Front End,它提供了一个完整的Java解析器,构建了Java AST和符号表,并且可以构建一个调用图。 Java前端还可以读取.class文件;你不清楚你是否想要爬进课堂档案,寻找信息。

你想要的答案不是现成的。您需要构建一些自定义代码来实现第一段中的想法,但DMS可以提供​​大部分原材料。它没有从.class文件中提供太多细节(这些文件主要用于解析源代码中的类型)。

© www.soinside.com 2019 - 2024. All rights reserved.