C ++代码依赖/调用图“查看器”?

时间:2012-03-09 10:16:51

标签: c++ refactoring

是否有一个(免费)工具可以显示给定函数中所有函数调用的图形? 例如,如果我在一个复杂的函数fun()上使用它我试图理解,它会向我展示fun()按顺序调用的所有函数,然后我就有可能看到函数的相同内容由fun()调用,依此类推。 我正在为C ++代码寻找这个。 这样的事情是否存在?

编辑:我正在使用VS 2008,如果这有帮助,但我认为这样的软件无论如何都会对源文件起作用

8 个答案:

答案 0 :(得分:18)

Doxygen可以做到这一点。请参阅CALL_GRAPH配置选项:

  

如果CALL_GRAPHHAVE_DOT标记设置为YES,那么doxygen将为每个全局函数或类方法生成一个调用依赖关系图。请注意,启用此选项将显着增加运行时间。因此,在大多数情况下,最好只使用\ callgraph命令为所选函数启用调用图。

答案 1 :(得分:6)

是的,Eclipse CDT Call Hierarchy视图提供了这一点。此外,此视图有两个选项:

  • 显示来电者
  • 显示Callees

你问的是第二个,但我更喜欢代码分析中的第一个。

答案 2 :(得分:4)

Intel(R) Single Event API是一个免费的开源项目,它利用GraphVis进行调用图可视化。手动或编译器自动化仪器需要花费一些劳力,但除了统计和调用图之外,您还可以获得加班视图。 Example of the image you can get

答案 3 :(得分:3)

是的,存在这样的事情。 Google标题为静态代码分析。例如,有Understand之类的工具,你的编译器很可能也会这样做,我将你引用它的文档。

答案 4 :(得分:3)

您可以使用callgrind,它是GUI工具kcachegrind

答案 5 :(得分:2)

g ++和大多数编译器可以做你想要的。它被称为profiling。还有oprofile。分析器为您提供应用程序after执行的调用图。这对于学习代码非常有用,您还可以在查看图表时浏览[debug]输出。相反,代码分析器会为您提供所有可能的调用路径,但是,您将无法轻松地看到重要路径。

答案 6 :(得分:2)

我不知道任何专门为此设计的工具。但是,有几种方法可以做到:

  • 使用IDE(QtCreator是免费的,Visual Studio Express也可能有用,Eclipse CDT)
  • 使用(ctags)[http://ctags.sourceforge.net/]和一个有能力的文本编辑器。
  • 使用callgrind及其带来的几个视图。优点:您可以看到真正调用的函数。缺点:只能在unix中运行,而且你必须进行分析。
  • 使用Doxygen ...这个真的很花哨,因为它会生成代码的html“视图”,只要你提供正确的选项。

答案 7 :(得分:1)

VC ++ 2008/2010 profiler生成包含此信息的文件* CallerCalleeSummary.csv。这是解释如何将其与示例程序一起使用的文章的链接:Profiling of C++ Applications in Visual Studio