【发布时间】:2015-03-20 08:19:44
【问题描述】:
我正在寻找从命令行为 java 项目创建调用图。我探索了几个项目,每次都达不到我的目标(无论是在我的理解上,还是在功能上)。一些关于如何做到这一点的简单指南会很棒,另外一个目的是获得该图的文本表示。
这是我尝试过的:
调用图:https://github.com/gousiosg/java-callgraph
这为我提供了我想要的文本输出,但我找不到方法(在查看文档一段时间后)将其转换为可视(图像文件)图形输出。
烟灰:http://sable.github.io/soot/
在花费大量时间查看似乎很难理解的 SOOT 文档之后,我设法让 SOOT 创建字节码。但是,我找不到任何关于如何从中创建调用图的指南。我只在主页上看到它可以 这样做,并且我从我的谷歌搜索中收到了几个电子邮件对话,所有这些都只是没有答案的问题。我正在使用命令的夜间构建:
java -cp soot-trunk.jar soot.Main -cp . -pp HelloWorld
HelloWorld 是我的 java 文件的名称,我得到一个 .class 文件的输出,但我看不到如何获取实际的调用图。这是在遵循此处的指南之后:https://github.com/Sable/soot/wiki/Running-Soot。当我关注有关可视化的链接时,它们似乎是断开的链接,然后重定向回主页。我可以在命令行页面上看到一些关于使用 -cg 标志的信息,但是什么都不能工作——我只是得到一个选项解析错误,提示一个无效的参数:https://ssebuild.cased.de/nightly/soot/doc/soot_options.htm#phase_5
搜索 stackoverflow - 现有答案 我已经看过几个类似的问题,例如:Static analysis of Java call graph 但是,答案只是说“使用烟灰”或“使用调用图”,我一直在尝试这些没有任何运气 - 尽管我与调用图最接近,因为我确实有文本输出。
我看到一些基于 GUI 的软件和 Eclipse 插件声称可以创建调用图,但我正试图通过命令行使其工作。
非常感谢任何帮助、指南或带有调用图或 Soot 的命令集,或者其他程序会真正提供帮助。可能还值得向他们提交任何简短的教程以获取他们的文档,因为似乎有搜索时问题多于答案。
作为参考,我目前正在尝试以下一个非常简单的类:
public class HelloWorld {
public static void main(String[] args) {
foo();
}
public static void foo(){
System.out.println("Hello World");
}
}
【问题讨论】:
标签: java static-code-analysis call-graph