C++ C++;“代码依赖关系/调用图”;观众;?
是否有一种(免费)工具可以显示给定函数中所有函数调用的图形? 例如,如果我在一个复杂函数fun()上使用它,我试图理解它,它会按顺序显示fun()调用的所有函数,然后我有可能看到fun()调用的函数的相同内容,等等。 我正在寻找C++代码。 这样的事情真的存在吗C++ C++;“代码依赖关系/调用图”;观众;?,c++,refactoring,C++,Refactoring,是否有一种(免费)工具可以显示给定函数中所有函数调用的图形? 例如,如果我在一个复杂函数fun()上使用它,我试图理解它,它会按顺序显示fun()调用的所有函数,然后我有可能看到fun()调用的函数的相同内容,等等。 我正在寻找C++代码。 这样的事情真的存在吗 编辑:如果有帮助的话,我正在使用VS2008,但我认为这样的软件无论如何都可以在源文件上工作是的,这样的东西是存在的。谷歌的标题是静态代码分析。例如,有一些工具,如,而且您的编译器也很可能可以做到这一点,请参阅其文档。可以做到这一点。请
编辑:如果有帮助的话,我正在使用VS2008,但我认为这样的软件无论如何都可以在源文件上工作是的,这样的东西是存在的。谷歌的标题是静态代码分析。例如,有一些工具,如,而且您的编译器也很可能可以做到这一点,请参阅其文档。可以做到这一点。请参阅配置选项: 如果
CALL\u GRAPH
和HAVE\u DOT
标记设置为YES
,则doxygen将为每个全局函数或类方法生成调用依赖关系图。请注意,启用此选项将显著增加运行时间。因此,在大多数情况下,最好仅使用\callgraph命令为选定函数启用调用图
g++和大多数编译器可以做你想做的事情。它被称为。还有一个问题。探查器在应用程序执行后为您提供应用程序的调用图。这对于学习代码非常有用,您还可以在查看图形时浏览[debug]输出。相反,代码分析器将为您提供所有可能的调用路径,但是,您将无法轻松查看重要路径。是的,Eclipse CDT视图正好提供了这一点。此外,此视图有两个选项:
- 显示来电者
- 显示被叫者
你问的是第二个,但我更喜欢代码分析中的第一个。我不知道有专门为此设计的工具。但是,有几种方法可以做到这一点:
- 使用IDE(QtCreator是免费的,VisualStudioExpress也可能有帮助,EclipseCDT)
- 使用(ctags)[http://ctags.sourceforge.net/]和一个有能力的文本编辑器
- 使用callgrind及其带来的几个视图。优点:您可以看到真正被调用的函数。缺点:只在Unix中运行,您必须配置文件
- 使用强氧剂。。。如果您提供了正确的选项,这一个就可以生成代码的html“视图”
对于任何非平凡的程序来说,输出都会非常笨拙。。。不过,使用智能的Omision启发法——可能会奏效。嗯,你不需要非常智能的启发法。两个或三个深度的截止线就足够了。显然,您无法显示从
main
到下的所有内容。我看到的主要问题是virtual
函数,其中调用的实际实现是在运行时确定的。可能重复(您使用的编译器是什么?:-/)我主要使用英特尔Fortran编译器,但英特尔C/C++编译器也可以生成调用图。但是,正如Greg所建议的那样,Doxygen可能是一个更好的答案。如果a)存在重载或多重继承(什么,Doxygen进行完整的Koenig查找?)或者存在间接函数调用,那么Doxygen怎么可能是一个更好的答案呢?但是分析只会显示那些实际执行的调用图,而不是“所有可能的”.我相信探查器足以理解代码。这是简单和快速做,将给你的基本想法。对于大型图形,Doxygen输出可能会很混乱。