1

我的问题与类似的问题不同,例如:

逆向工程 C++ 的工具(即查看 C++ 类)

而不是寻找类图,我更感兴趣的是寻找调用链和依赖关系并生成漂亮的图表。

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

已经有这个工具了吗?是否有可能在二进制级别上做到这一点?像库中的逆向工程函数依赖项(.a、.so、.dll 作为输入)?

编辑:

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

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

更新

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

感谢所有其他建议。他们让我大开眼界。

4

5 回答 5

3

CppDepend 看起来非常适合这项任务。

在此处输入图像描述

http://www.cppdepend.com/

于 2013-02-23T17:08:28.163 回答
2

Doxygen 可以显示调用者和被调用者树:
doxygen

编辑1:
示例 Doxygen 调用树

于 2013-02-23T18:16:08.883 回答
1

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

于 2013-02-23T16:54:35.017 回答
1

在您可以使用的 Windows 上CodeTune,它会给您显示函数依赖关系的调用图

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

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

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

于 2013-02-23T17:04:23.580 回答
1

从评论中推广。

您是否尝试过将 valgrind 与callgrind工具一起使用?

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

而且它是完全免费的。

在此处输入图像描述

于 2013-02-24T08:59:48.920 回答