在调试时创建调用堆栈的可视图(C#、Visual Basic、C++ 和 JavaScript)

创建代码映射,以便在调试时对调用堆栈进行可视化跟踪。 可以在映射中进行标注以跟踪代码执行的操作,以便专注于查找 Bug。

若要查看演练,请观看此视频:视频:通过代码图调试器集成进行可视化调试(第 9 频道)

若要详细了解使用代码图时能使用的命令和操作,请参阅浏览和重新排列代码图

重要

只能在 Visual Studio Enterprise Edition 中创建代码图。

下面是代码图的简介:

使用代码图上的调用堆栈调试

映射调用堆栈

  1. 在 Visual Studio Enterprise C#、Visual Basic 或者 JavaScript 项目中,若要开始调试,请选择“调试” > “开始调试”,或按 F5 。

  2. 在应用进入中断模式或你单步执行某一函数之后,请选择“调试” > “代码图”,或按 Ctrl+Shift+` 。

    当前的调用堆栈在新代码图上显示为橙色:

    查看代码图上的调用堆栈

随着你继续调试,代码图会自动更新。 更改映射项或布局不会对代码造成任何影响。 你可随意在图上重命名、移动或移除任何内容。

若要获取有关某个项的详细信息,请将鼠标悬停至该项,然后查看其工具提示。 也可以选择工具栏中的“图例”来了解每个图标的含义。

代码图图例

备注

代码图顶部如果出现消息“关系图可能基于旧版本的代码”,则说明在你上次更新图后,代码可能已发生更改。 例如,图中的某个调用可能已在代码中不存在了。 请关闭此消息,然后在再次更新图之前,尝试重新生成解决方案。

映射外部代码

默认情况下,只有你自己的代码会显示在图中。 若要查看图中的外部代码:

  • 右键单击“调用堆栈”窗口,然后选择“显示外部代码” :

    使用“调用堆栈”窗口显示外部代码

  • 或在 Visual Studio“工具”(或“调试”)>“选项” > “调试”中取消选择“启用‘仅我的代码’” :

    使用“选项”对话框显示外部代码

控制代码图的布局

更改代码图的布局不会对代码造成任何影响。

若要控制图的布局,请选择代码图工具栏上的“布局”菜单。

在“布局”菜单中,可以进行以下操作:

  • 更改默认布局。
  • 若要停止自动重新排列代码图,请取消选择“调试时自动布局”。
  • 若要在添加新项时尽可能少地重新排列代码图,请取消选择“增量布局”。

对代码进行标注

可以添加注释以跟踪代码中的情况。

若要添加注释,请在代码图中右键单击,选择“编辑” > “新建注释”,然后键入注释内容 。

若要在注释中添加新行,请按 Shift+Enter 。

向代码图上的调用堆栈添加注释

使用下一个调用堆栈更新映射

在运行应用到下一个断点或单步执行函数时,代码图会自动添加新的调用堆栈。

使用下一个调用堆栈更新代码图

若要阻止代码图自动添加新的调用堆栈,请在代码图工具栏上选择“在代码图上自动显示调用堆栈”。 代码图会继续突出显示现有的调用堆栈。 若要手动向图中添加当前的调用堆栈,请按 Ctrl+Shift+` 。

现在你已获得一个采用 C# 或 Visual Basic 格式的代码图,可以添加字段、属性和其他方法等项,以跟踪代码中的情况。

若要转到代码中某个方法的定义,请在代码图中双击该方法,或将其选中并按 F12,或右键单击该方法并选择“转到定义” 。

转到代码图上某方法的代码定义

若要将想跟踪的项添加到代码图中,请右键单击方法,然后选择想跟踪的项。最近添加的项显示为绿色。

调用堆栈代码图上与某方法相关的字段

备注

默认情况下,向图添加项还会添加父组节点(如类、命名空间和程序集)。 通过选择代码图工具栏上的“包括父项”按钮或在添加项时按 Ctrl,可以关闭和开启此功能 。

显示调用堆栈代码图上某方法中的字段

继续生成图以查看更多代码。

查看使用字段的方法:调用堆栈代码图

调用堆栈代码图上使用某字段的方法

使用映射查找 Bug

通过代码可视化,可帮助你更快发现 Bug。 例如,假设你正在调查某个绘图应用中的 Bug。 当你绘制一条线并尝试撤消该操作时,直到你绘制另一条线后才会发生变化。

因此,可在 clearundoRepaint 方法中设置断点,启动调试,然后生成如下所示的图:

向代码图添加另一个调用堆栈

你注意到图中所有用户笔势均调用 Repaint,但 undo 除外。 这可能解释了 undo 不立即发挥作用的原因。

在修复此 Bug 并继续运行应用后,图中增加了从 undoRepaint 的新调用:

向代码图上的调用堆栈添加新方法调用

与他人共享此代码图

你可以导出代码图,然后通过 Microsoft Outlook 将其发送给其他人,或保存到你的解决方案中,再将其签入版本控制。

若要共享或保存代码图,请使用代码图工具栏中的“共享”。

与他人共享调用堆栈代码图

请参阅

映射解决方案中的依赖项

使用代码图调试应用程序

使用代码图分析查找潜在问题

浏览和重新排列代码图