在 Visual Studio 调试器中使用内存窗口(C#、C++、Visual Basic、F#)

调试期间,内存 窗口显示应用正在使用的内存空间。

调试器窗口(如 监视自动局部变量),快速监视 对话框会显示变量,这些变量存储在内存中的特定位置。 “内存”窗口显示总体概况。 内存视图便于检查在其他窗口中无法有效显示的大型数据片段(例如缓冲区或大型字符串)。

“内存”窗口并不局限于显示数据。 它显示内存空间中的所有内容,包括未分配内存中的数据、代码和随机垃圾位。

内存 窗口不适用于脚本或 SQL 调试。 这些语言无法识别内存的概念。

打开“内存”窗口

与其他调试器窗口一样,内存 窗口仅在调试会话期间可用。

重要

若要启用“内存”窗口,必须在“工具”>“选项”(或“调试”>“选项”)>“调试”>“常规”中选择“启用地址级调试”

打开“内存”窗口:

  1. 确保在“工具”>“选项”(或“调试”>“选项”)>“调试”>“常规”中选择“启用地址级调试”

  2. 开始调试时,选择绿色箭头、按 F5,或选择 调试>启动调试

  3. 在“调试>Windows>内存下,选择”内存 1“、”内存 2“、”内存 3“或”内存 4”。 (某些版本的 Visual Studio 仅提供一个 内存 窗口。

多个窗口允许同时维护内存空间中不同区域的视图。

在“内存”窗口中四处移动

计算机的地址空间很大,在 “内存”窗口中滚动时很容易迷失方向。

更高的内存地址显示在窗口底部。 若要查看更高的地址,请向下滚动。 若要查看较低的地址,请向上滚动。

在大多数情况下,需要查找特定的内存位置。

查找内存位置

可以通过拖放或在 地址 字段中输入地址,立即转到 内存 窗口中的指定地址。 “地址”字段接受字母数字地址和计算结果为地址的表达式,如 e.User.NonroamableId

若要在 地址 字段中强制立即重新计算表达式,请选择圆箭头 自动重新计算 图标。

默认情况下,内存 窗口将 地址 表达式视为实时表达式,这些表达式在应用运行时会重新计算。 例如,动态表达式可用于查看指针变量引用的内存。

使用拖放操作移动到内存位置:

  1. 在任何调试器窗口中,选择内存地址或包含内存地址的指针变量。

  2. “内存”窗口中拖放地址或指针。

    该地址显示在 地址 字段中,内存 窗口将调整为在顶部显示该地址。

在“地址”字段中输入一个位置以移动到内存位置:

  • 地址 字段中键入或粘贴地址或表达式,然后按 Enter,或从 地址 字段中的下拉列表中选择该地址。

    该地址显示在 地址 字段中,内存 窗口将调整为在顶部显示该地址。

    “内存”窗口的屏幕截图。

自定义“内存”窗口

默认情况下,内存内容以十六进制格式显示为 1 字节整数,窗口宽度确定显示的列数。 可以自定义 内存 窗口显示内存内容的方式。

更改内存内容的格式:

  • 在“内存”窗口中右键单击,然后从上下文菜单中选择所需的格式。

更改“内存”窗口中的列数:

  • 选择 字段旁边的下拉箭头,然后选择要显示的列数,或选择 自动 以根据窗口宽度自动调整。

如果不希望在应用运行时更改 内存 窗口的内容,则可以关闭实时表达式计算。

切换实时评估:

  • 在“内存”窗口中右键单击,然后在上下文菜单中选择“自动重新计算”

    备注

    实时表达式计算是一个开关,默认情况下处于打开状态,因此选择“自动重新计算”会将其关闭。 再次选择“自动重新计算”会重新打开。

可以在 内存 窗口顶部隐藏或显示工具栏。 当工具栏处于隐藏状态时,您将无法访问 “地址”字段或其他工具。

切换工具栏的显示状态:

  • 内存 窗口中右键单击,然后在上下文菜单中选择 显示工具栏。 工具栏显示或消失,具体取决于其以前的状态。

通过指针访问内存(C/C++)

在本机代码应用中,可以使用注册名称作为实时表达式。 例如,可以使用堆栈指针跟踪堆栈。

跟踪内存中的指针:

  1. 在“内存”窗口 “地址”字段中,输入当前范围内的指针表达式。 根据所使用的语言,可能必须取消引用指针。

  2. 按下键,然后按下键。

    使用调试命令(如 Step)时,地址 字段中显示的内存地址以及内存 窗口顶部的内存地址会在指针更改时自动更新。

查看内存指针 (.NET)

如果要基于内存指针(例如从 堆快照获取的地址)查看 .NET 对象的内容,可以使用 {CLR}@Address 表示法执行此操作。 地址必须是指向内存的指针,例如0x1D102A581B0。 在“内存”窗口的 地址 字段中,使用 {CLR}@Address 格式输入内存指针。 你也可以使用同一表示法通过监视窗口添加监视。

若要从堆快照获取内存指针地址,请打开堆转储,选择“调试托管内存”,这将打开内存使用情况工具。 右键单击感兴趣的对象,然后选择 查看实例