Java调用图的静态分析

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

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

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

PS:你会发现现有的问题“ 如何生成Java调用图 ”,因为它听起来完全相同,但它根本不是我需要的。

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

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

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

烟灰应该可以让您轻松实现您的目标: http : //www.sable.mcgill.ca/soot/

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

您可以在此处找到所有必要的文档: http : //www.sable.mcgill.ca/soot/tutorial/index.html

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

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

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

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