有没有办法在Visual Studio中获取某些c ++函数的调用图?

NoS*_*tAl 23 c++ visual-studio

我想知道是否有一个VS工具可以显示给定C++函数的调用图(即列出所有可能的执行路径的图表).在仅在少数几个地方调用函数的情况下,它将有助于导航大代码库.

对于经常被称为函数,printf它可以简单地说:

选择太多......

再一次,我想制作这样的工具真的不容易,所以我想知道它是否存在,但你知道它似乎可以这样做,所以你永远不会知道...... :)

编辑:我知道找到所有引用,但这只提供函数的调用站点,而不是调用函数调用函数的函数的调用站点...

编辑:VS是2010年,但如果有必要,VS2012是一个选项.

Chi*_*ils 17

你提到你知道找到所有参考文献.你看过Call Hierarchy吗?它可能不是你的"梦想方法",但它允许你根据给定函数的"调用"和"调用"来查看函数.该窗口还允许您添加多个功能以树格式查看.所以基本上你会在可能的结果中上下.

右键单击所需的方法(可以是层次结构中的任何位置)=>

选择"查看呼叫层次结构"

请注意,如果您可以向窗口添加多个参考点.需要时删除

您也可以使用Ctrl + K或Ctrl + T.


另一个很好的例子,恕我直言,对C++和C#与VS之间的差异感到失望.我认为代码地图正是您正在寻找的.当然假设您正在使用Ultimate - 但不是,而不是使用C++.


Sig*_*erm 12

据我所知,C++/MSVC中没有这样的功能.

但是,有一个Windows的AQTime分析器具有"静态分析"选项(如果我没记错的话)扫描已编译的可执行文件,生成调用图并显示不可缓存的函数.

如果我没记错的话,AQtime会集成到visual studio(专业版,afaik)中.

不幸的是,这是一款售价约500美元的商业分析器,试用版中没有此功能.上次我使用静态分析是在3.4年前,我现在还不完全记得细节(而且我再也无法访问AQTime了).无论如何,它是一个专门的工具,所以我不建议购买它,除非你优化代码速度24/7.

也许,通过谷歌搜索"静态分析","代码覆盖"或研究其他分析器,你会发现一些类似的工具,免费工作.

除此之外,doxygen可以为C++代码生成调用图.在doxygen的情况下,你将不得不寻找从未被称为自己的函数.

此外,Visual Studio 2008具有内置的调用者图形功能(我认为,它使用intellisense).基本上,你右键单击任何功能并选择"显示呼叫者"(或类似的东西),这将打开窗口中所有功能的列表(visual studio THINKS正在调用你的功能).由于VS2008中存在此功能,因此应将其包含在VS2010中.但是,由于显而易见的原因(虚拟方法,回调等),它无法检测每个调用方.


chr*_*mue 7

也许doxygen是你正在寻找的工具.它提供了生成调用图(显示特定函数调用的所有函数)和/或调用者图(显示函数直接或间接调用的函数)的可能性.

见:http://www.doxygen.nl/manual/diagrams.html

  • 我也只能推荐doxygen.配置它可以为您提供包含所有调用图的html可浏览文档.Afaik还有可能在VS中包含doxygen创建的文档.图形将由graphviz绘制,它确实有助于掌握大型代码库. (2认同)