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

创建代码图,以在调试时直观地跟踪调用堆栈。 可以在地图上做笔记来跟踪代码正在执行的工作,以便你可以专注于查找错误。

有关可用于代码映射的命令和操作的详细信息,请参阅 浏览和重新排列代码映射

重要

只能在 Visual Studio Enterprise 版本中创建代码映射。

下面是代码图的简要概述:

使用代码图上的调用堆栈

映射调用堆栈

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

  2. 应用进入中断模式或单步执行函数后,选择 “调试>代码映射”或按 Ctrl+Shift+`

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

    请参阅代码图上的调用堆栈

继续调试时,代码图会自动更新。 更改地图项或布局不会以任何方式影响代码。 可以随意重命名、移动或删除地图上的任何内容。

若要获取有关项的详细信息,请将鼠标悬停在项目上方并查看项的工具提示。 还可以选择工具栏中的 图例 ,了解每个图标的含义。

代码图例

注释

该消息 图可能基于旧版本的代码 意味着代码映射顶部的代码可能在您上次更新后已更改。 例如,映射中的调用可能不再存在于代码中。 关闭消息后,再尝试重新生成解决方案,然后更新映射。

映射外部代码

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

  • “调用堆栈 ”窗口中右键单击并选择“ 显示外部代码

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

  • 或者,在 Visual Studio 中清除 “启用仅我的代码 ”复选框:

    此选项在“所有设置>常规”部分下的“工具”(或>”)>选项窗格中可用:

    显示如何在 Visual Studio 中选择“仅我的代码”选项的屏幕截图。

    此选项在“调试常规”部分下的>”(或“调试”>)对话框中可用:

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

控制地图的布局

更改地图的布局不会影响代码。

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

“布局 ”菜单中,可以:

  • 更改默认布局。
  • 通过取消选择调试时自动布局,停止地图的自动重排。
  • 通过取消选择 增量布局,在添加项时尽可能少地重新排列地图。

记下代码

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

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

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

在代码图上添加注释以调用堆栈

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

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

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

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

向地图添加相关代码

现在,你已获得 C# 或 Visual Basic 中的地图,接下来可以添加字段、属性和其他方法等项,以跟踪代码中发生的情况。

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

转到代码映射DebuggerMap_GoToCodeDefinition上方法的代码定义

若要向地图添加要跟踪的项,请右键单击方法,然后选择要跟踪的项目。最近添加的项目以绿色显示。

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

注释

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

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

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

请参阅使用字段的方法:调用堆栈代码图

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

使用地图查找缺陷

可视化代码有助于更快地查找 bug。 例如,假设你正在调查绘图应用中的 bug。 当你画一条线并尝试撤销时,只有在画另一条线之后才会生效。

因此,在clearundoRepaint方法中设置断点,开始调试并生成如下所示的映射:

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

你注意到地图上所有用户手势都会调用Repaint,但undo例外。 这可能解释为什么 undo 不能立即工作。

在修复 bug 并继续运行应用后,地图会将从 undoRepaint 的新调用添加进去。

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

与他人共享地图

可以导出地图,将其发送给具有 Microsoft Outlook 的其他人,将其保存到解决方案中,然后将其签入版本控制。

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

与他人共享调用堆栈代码映射