【问题标题】:C++: Dependency tracking tool (reverse engineering) [closed]C++:依赖跟踪工具(逆向工程)[关闭]
【发布时间】:2018-12-22 23:30:06
【问题描述】:

我的问题与以下问题虽然相似但不同:

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

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

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

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

编辑:

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

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

更新

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

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

【问题讨论】:

  • 您是否尝试过将 valgrind 与 callgrind 工具一起使用?
  • 谢谢。这似乎像 gprof 一样在探查器路线上。对调试程序更有用。
  • 将我关于 valgrind 的 cmets 推广为答案,因为没有人提到他们

标签: c++ dependencies


【解决方案1】:

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

http://www.cppdepend.com/

【讨论】:

  • 谢谢。看起来非常精致,可能最接近我想要的全能分析仪。可惜太贵了!投票赞成。
【解决方案2】:

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

编辑 1:

【讨论】:

  • 谢谢。我不知道 Doxygen 可以做的不仅仅是生成文档。不过,我必须测试它的稳健性。很好奇,有没有显示结果的示例(例如图表)?
  • @kakyo:查看我的最新编辑 1。
【解决方案3】:

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

【讨论】:

  • 谢谢。看起来很有趣。可惜它只适用于 Windows。虽然这不是我想要的。以后可能会有用。希望它比垃圾箱提供更多。投票赞成。
【解决方案4】:

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

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

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

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

【讨论】:

  • linux 工具集看起来很有趣。它也给我带来了graphviz。也不知道这个工具。谢谢!
【解决方案5】:

从评论中提升。

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

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

而且它完全免费

【讨论】:

    猜你喜欢
    • 2010-09-07
    • 2010-12-15
    • 1970-01-01
    • 2011-05-14
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多