28

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

对于经常调用的函数,printf它可以简单地说:

太多的选择...

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

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

编辑:VS 是 2010,但如有必要,可以选择 VS2012。

4

8 回答 8

20

你提到你知道如何找到所有的参考资料。你有没有考虑查看Call Hierarchy?这可能不是您的“梦想方法”,但它确实允许您根据给定函数的“调用”和“调用”来查看函数。该窗口还允许您添加多个功能以树格式查看。所以基本上你会通过可能的结果向上或向下树。

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

选择“查看调用层次结构”

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

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


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

于 2013-06-27T09:52:16.223 回答
12

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

但是,Windows 的 AQTime 分析器具有“静态分析”选项(如果我没记错的话)扫描已编译的可执行文件、生成调用图并向您显示无法访问的函数。

如果我没记错的话,AQtime 集成到了视觉工作室(专业版,afaik)。

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

也许,通过谷歌搜索“静态分析”、“代码覆盖率”或研究其他分析器,您会发现有些类似的工具可以免费完成这项工作。

除此之外,doxygen 可以为 C++ 代码生成调用图。如果是 doxygen,您将不得不寻找从未调用过的函数。

此外,Visual Studio 2008 有一个内置的调用者图表功能(我认为它使用了智能感知)。基本上,你右键单击任何函数并选择“显示调用者”(或类似的东西),这将在一个窗口中打开所有函数的列表(visual studio THINKS 正在调用你的函数)。因为这个特性在 VS2008 中已经存在,所以它应该包含在 VS2010 中。但是,由于明显的原因(虚拟方法、回调等),它无法检测到每个调用者。

于 2013-06-27T19:16:53.140 回答
7

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

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

于 2013-06-27T11:13:37.123 回答
3

看看了解工具 ( http://www.scitools.com )。它非常适合绘制调用图和控制流程图。不幸的是,它是商业的。

于 2013-07-03T09:04:02.573 回答
3

您可以在进行符号搜索后解析结果。只需右键单击您的源代码,然后选择查找所有执行符号搜索的引用。它在http://blogs.msdn.com/b/vcblog/archive/2009/11/17/improvements-to-find-all-references-in-visual-studio-2010.aspx有更详细的解释

于 2013-07-04T05:27:16.710 回答
3

您可以尝试CppDepend,它为您提供 VS 内部的调用图,并在其依赖图中提供许多功能。

在此处输入图像描述

于 2017-10-02T09:33:45.907 回答
1

Source Navigator 是我在 C++ 项目中使用过并且非常满意的工具。同样,它不在 Visual Studio IDE 中,但如果您不介意按 Alt-Tab ,它有一些很大的优势 :-)

  • 适用于 C 和 C++ 源代码
  • 它的索引和搜索速度非常快;使用起来很愉快,恕我直言
  • 是一个可视化工具
  • 是一个免费的开源工具

有关一些屏幕截图,请参见http://sourcenav.berlios.de/screenshots/

特别是,您正在寻找交叉引用浏览器

“它可以找到函数的每个调用,或者告诉你特定函数调用的所有内容。它创建树形图,显示项目符号数据库中的基本关系,例如函数调用层次结构树。你可以向上和向下遍历层次结构树,以及扩展或限制树。您可以选择层次结构中的项目并显示它们的引用和引用关系;这些关系基于所选符号的“观点”。

尽管本教程“使用交叉引用浏览器”的示例屏幕截图显示了类而不是函数的引用关系(使用红色箭头),但后一个用例将非常相似。您还可以浏览从函数调用的函数/方法,这将是一个引用关系,使用蓝色箭头而不是红色箭头显示。

在此处输入图像描述

试一试吧!正如我之前提到的,我一直是这个工具的快乐用户。它不是很有名,但它是一个很好的软件(这也是 Tcl/Tk 在右手中的有用性的一个例子)。

于 2013-10-21T12:01:51.953 回答
1

我认为您应该能够在您的解决方案上使用 VS Plugin - CodeGraph 并寻找您正在寻找的特定功能并从那里继续。它对您的解决方案进行静态分析,并生成一个很好的调用流图。检查“ https://marketplace.visualstudio.com/items?itemName=YaobinOuyang.CodeAtlas ”。希望这可以帮助。

于 2017-10-01T15:12:05.020 回答