Java调用图的静态分析

Mar*_*ouf 22 java static analysis call-graph

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

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

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

PS:你会发现现有的问题" 如何生成Java调用图 ",因为它听起来完全一样,但它根本不是我需要的.

met*_*dos 6

您可以将DoxygenGraphviz一起使用。它易于安装和使用。


Geo*_*ios 6

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


Eri*_*ric 5

Soot 应该可以让您轻松实现您想要的:http : //www.sable.mcgill.ca/soot/

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

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

此外,还有一个针对 Soot 的活动邮件列表。


Jam*_*eam 5

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


Ira*_*ter 2

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

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

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