查看调用层次结构

通过查看代码的调用层次结构,可以在选定方法、属性或构造函数间导航所有调用方和被调用方(有时)。 这有助于更好地理解代码的流动方式,以及评估代码更改的效果。 可以检查多个级别的代码,以查看方法调用的复杂链条以及代码的其他入口点。 这使你能够找到所有可能的执行路径。

在 Visual Studio 中,可以在设计时查看调用层次结构。 这意味着,你无须设置断点并启动调试器以查看运行时调用堆栈。

使用“调用层次结构”窗口

若要显示“调用层次结构”窗口,请在代码编辑器中右键单击某个方法、属性或构造函数调用的名称,然后选择“查看调用层次结构”

成员名称会显示在“调用层次结构”窗口的树状视图窗格中。 如果展开成员节点,则会显示“调用方”成员名称,对于 C++,则会显示“被调用方”成员名称子节点。

对于 C++ 代码,可以看到对成员和成员的显式调用:

Call Hierarchy for C++ code in Visual Studio

注意

在 C++ 代码中,可以隐式调用成员函数,例如构造函数或类型转换方法;这些隐式调用不一定包含在列表中。

对于 C# 和 Visual Basic 代码,可以查看某个成员的调用方,但不能查看其被调用方:

Call Hierarchy for C# code in Visual Studio

  • 如果展开“调用方”节点,则显示调用选定成员的所有成员。

  • 对于 C++,f 展开“从节点调用”,将显示所选成员调用的所有成员。

然后,可以展开每个调用成员来查看其“调用方”,对于 C++,则可以查看“被调用方”节点。 这样就可以在调用方的堆栈中导航,如下图所示:

Call Hierarchy window with multiple levels expanded

对于定义为虚拟或抽象成员的成员,会显示一个“重写方法名”节点。 针对接口成员,显示的是“实现方法名”节点。 这些可展开的节点与“调用方”和“被调用方”节点显示在同一级。

工具栏上的“搜索范围”框包含“我的解决方案”、“当前项目”和“当前文档”选项。

在“调用层次结构”树状视图窗格中选择某个子成员时:

  • “调用层次结构”详细信息窗格会显示在其中从父成员调用子成员的所有代码行。

  • “代码定义”窗口(如果打开)显示选定成员的代码(仅限 C++)。 有关此窗口的详细信息,请参阅查看代码的结构

注意

调用层次结构功能不会查找方法组引用,这些引用包含将方法添加为事件处理程序或将方法分配给委托的位置。 若要查找对方法的所有引用,可以使用“查找所有引用”命令。

快捷菜单项

下表描述了在树状视图窗格中右键单击某个节点时,可以使用的多个快捷菜单选项。

上下文菜单项 说明
作为新根添加 将选定节点添加为树状视图窗格中的新根节点。 这样就可以集中关注特定子树。
移除根 从树视图窗格中删除所选根节点。 只有根节点有此选项。

还可以使用“移除根”工具栏按钮来移除选定的根节点。
转到定义 在选定节点上运行“转到定义”命令。 这会导航到成员调用的原始定义或变量定义。

若要运行“转到定义”命令,还可以双击选定节点或在选定节点上按 F12。
查找所有引用 在选定节点上运行“查找所有引用”命令。 这会在项目中查找所有引用某个类或成员的代码行。

还可以使用 Shift+F12 在选定节点上运行“查找所有引用”命令。
Copy 复制选定节点(但不包含其子节点)的内容。
刷新 折叠选定节点,重新展开它后便可显示最新的信息。