C ++:依赖关系跟踪工具(逆向工程)

时间:2013-02-23 16:51:03

标签: c++ dependencies

我的问题与以下问题有所不同:

Tools to reverse engineer C++ ( i.e. to view C++ classes )

我没有寻找类图,而是更感兴趣的是找到调用链和依赖项并生成漂亮的图形。

有这样的工具吗?我知道 cscope ctags 可以做一些我想做的事情,但是采用非常低级的交互式方式(一次一个查询)。我想要更自动化的东西,例如,给定一个API,找到它的所有子例程调用路径,直到它到达叶子并向我显示。

有没有这方面的工具? 是否可以在二进制级别执行此操作?像库中的逆向工程函数依赖项(.a,。so,.dll作为输入)?

修改

我更喜欢静态分析工具而不是分析器,因为我希望它也适用于库和模块代码。

我也更喜欢跨平台解决方案。我主要在Mac上,但Linux或Windows的工具也很有趣。

更新

在研究了建议后,我决定Doxygen是我想要的。它提供了调用者和被调用者图,并使用静态分析,跨平台和免费。

感谢所有其他建议。他们睁开了我的眼睛。

5 个答案:

答案 0 :(得分:3)

CppDepend对于任务看起来非常棒。

enter image description here

http://www.cppdepend.com/

答案 1 :(得分:2)

Doxygen可以显示来电者和被叫者树:
doxygen

编辑1:
Example Doxygen call trees

答案 2 :(得分:1)

您可以使用DEPENDS应用程序来检测Windows中的大多数C C ++和C#库 但仍然不会给你打电话链...... 这是链接DEPENDS

答案 3 :(得分:1)

在Windows上,您可以使用CodeTune,它会为您提供显示功能依赖性的调用图

http://www.thewallsoft.com/codetune-documentation/

在GNU / Linux上,您可以使用gprof然后使用此可视化工具创建调用图

http://code.google.com/p/jrfonseca/wiki/XDot#Screenshots

答案 4 :(得分:1)

从评论中推广。

您是否尝试过使用callgrind工具使用valgrind?

Valgrind对调试非常有用,但valgrind中的callgrind工具对于分析和了解哪些函数调用其他函数非常有用。它附带了一个名为kcachegrind的可视化工具,它允许您在函数调用的其他块中查看块。

完全免费

enter image description here