有没有非游戏工具可以创建整个应用程序的调用图?我并不是指通过逐个方法的指针来获取图片或绘制调用图。
我需要一个可通过编程方式访问的调用图,即该工具应将其刷新为文本模式的文件(例如XML)或在内存中构建调用图(这对大型应用程序来说是有问题的)。在DB中构建一个调用图将是非常好的。
静态和动态调用图都很有需求;虽然静态调用图更有趣一些,但它过于近似的事实是可以接受的。
到目前为止,我已经尝试过煤烟。然而,它甚至不能处理像FreeCol这样的中型项目(java源码是可用的)。Soot耗尽了该项目1.5 as的内存,然后JVM崩溃,如下所示:http://www.sable.mcgill.ca/pipermail/soot-list/2008-July/001828.html
有没有人能推荐一种工具来生成调用图,如上所述?Java或.NET语言也可以。
发布于 2010-02-01 06:33:53
我们的DMS Software Reengineering Toolkit可以构建C、Java和COBOL语言的全局调用图。这些数据被计算为内存中的数据结构,然后可以遍历以收集任意其他事实。(您可以将其导出到其他工具以遍历它,但对于大型调用图,导出的时间和精力将支配分析它的时间,因此我们倾向于不导出它。YMMV.)。
从"CALL X(...)“抽象形式的语句中提取调用图信息相对容易,因为目标X就在调用点的代码中。间接(虚拟或方法调用)是有问题的,因为实际的调用目标在调用点的代码中并不是微不足道的,而实际上分散在整个系统中,更糟糕的是,由运行时条件控制。在没有任何附加信息的情况下,调用图构造函数必须假定间接调用可以转到具有匹配签名的任何目标;这会在图中引入大量误报调用弧。
DMS使用(保守的)全局points-to分析作为调用图提取过程的一部分,以确定此类间接调用的位置,同时最大限度地减少误报。有关DMS可以提取什么的更多示例,请参见Flow analysis and call graphs,以及从包含250,000个函数的系统中提取的示例图形。
发布于 2010-02-01 02:38:15
JProfiler是一个不错的Java分析器,它将生成调用图,并允许您将其导出为XML格式。
我没有使用过Soot,所以我不能评论JProfiler与Soot相比的情况,但我希望JProfiler与应用程序相比需要2.5-3倍的内存。
发布于 2010-02-01 18:55:03
当他们的工具还处于测试阶段时,我已经使用过了。它建立了一个程序信息数据库,您可以通过编程方式进行查询。这家公司是一家初创公司,产品不再是测试版,尽管我在他们的网站上找不到任何地方,如何购买它,或者它的价格。
NDepend (http://www.ndepend.com/)是一个类似的.NET工具,我也用过,但我不确定是否可以通过编程访问它。XDepend (http://www.xdepend.com/)是他们的Java工具,我还没有用过。
https://stackoverflow.com/questions/2161613
复制相似问题