是否有一个(免费)工具可以显示给定函数中所有函数调用的图形? 例如,如果我在一个复杂的函数fun()上使用它我试图理解,它会向我展示fun()按顺序调用的所有函数,然后我就有可能看到函数的相同内容由fun()调用,依此类推。 我正在为C ++代码寻找这个。 这样的事情是否存在?
编辑:我正在使用VS 2008,如果这有帮助,但我认为这样的软件无论如何都会对源文件起作用答案 0 :(得分:18)
Doxygen可以做到这一点。请参阅CALL_GRAPH
配置选项:
如果
CALL_GRAPH
和HAVE_DOT
标记设置为YES
,那么doxygen将为每个全局函数或类方法生成一个调用依赖关系图。请注意,启用此选项将显着增加运行时间。因此,在大多数情况下,最好只使用\ callgraph命令为所选函数启用调用图。
答案 1 :(得分:6)
答案 2 :(得分:4)
Intel(R) Single Event API是一个免费的开源项目,它利用GraphVis进行调用图可视化。手动或编译器自动化仪器需要花费一些劳力,但除了统计和调用图之外,您还可以获得加班视图。
答案 3 :(得分:3)
是的,存在这样的事情。 Google标题为静态代码分析。例如,有Understand之类的工具,你的编译器很可能也会这样做,我将你引用它的文档。
答案 4 :(得分:3)
您可以使用callgrind,它是GUI工具kcachegrind。
答案 5 :(得分:2)
g ++和大多数编译器可以做你想要的。它被称为profiling。还有oprofile。分析器为您提供应用程序after
执行的调用图。这对于学习代码非常有用,您还可以在查看图表时浏览[debug]输出。相反,代码分析器会为您提供所有可能的调用路径,但是,您将无法轻松地看到重要路径。
答案 6 :(得分:2)
我不知道任何专门为此设计的工具。但是,有几种方法可以做到:
答案 7 :(得分:1)
VC ++ 2008/2010 profiler生成包含此信息的文件* CallerCalleeSummary.csv。这是解释如何将其与示例程序一起使用的文章的链接:Profiling of C++ Applications in Visual Studio