在 Visual Studio 调试器中使用“内存”窗口(C#、C++、Visual Basic、F#)
在调试期间,“内存”窗口显示应用使用的内存空间。
调试器窗口(如“监视”、“自动”、“局部变量”和“快速监视”对话框 )会显示存储于内存中特定位置的变量。 “内存”窗口显示总体概况。 内存视图对于检查大片的数据(如缓冲区和大的字符串)很方便,这些内容在其他窗口中显示得不太好。
“内存”窗口并不局限于显示数据。 该窗口可以显示内存空间中的任何内容,包括数据、代码以及未分配内存中的无用随机位。
“内存”窗口对于脚本或 SQL 调试不可用。 这些语言无法识别内存概念。
打开“内存”窗口
与其他调试器窗口一样,“内存”窗口仅在调试会话期间可用。
重要
若要启用“内存”窗口,必须在“工具”>“选项”(或“调试”>“选项”)>“调试”>“常规”中选择“启用地址级调试”。
打开“内存”窗口:
确保在“工具”>“选项”(或“调试”>“选项”)>“调试”>“常规”中选择“启用地址级调试”。
通过选择绿色箭头,按 F5,或选择“调试”>“启动调试”来启动调试。
在“调试”>“窗口”>“内存”下,选择“内存 1”、“内存 2”、“内存 3”或“内存 4”。 (某些版本的 Visual Studio 仅提供一个“内存”窗口。)
多个窗口允许同时维护内存空间中不同区域的视图。
在“内存”窗口中四处移动
计算机的地址空间很大,在“内存”窗口中滚动可能会轻易地失去位置。
较高的内存地址显示在窗口的底部。 若要查看较高的地址,请向下滚动。 若要查看较低的地址,请向上滚动。
在大多数情况下,需要查找特定的内存位置。
查找内存位置
通过使用拖放操作或在“地址”字段中输入地址,可以立即在“内存”窗口中转到指定地址。 “地址”字段接受字母数字地址和计算结果为地址的表达式,如 e.User.NonroamableId
。
若要强制立即重新计算“地址”字段中的表达式,请选择圆角箭头“ 自动重新计算”图标。
默认情况下,“内存”窗口将“地址”表达式视为实时表达式,它们会在应用运行时重新计算 。 实时表达式可能十分有用,例如,可用于查看指针变量所涉及的内存。
使用拖放移动到内存位置:
在任一调试器窗口中,选择内存地址或选择包含内存地址的指针变量。
将地址或指针拖动到“内存”窗口中。
该地址显示在“ 地址 ”字段中,“ 内存 ”窗口调整为在顶部显示该地址。
在“地址”字段中输入一个位置以移动到内存位置:
在“地址”字段中键入或粘贴地址或表达式,然后按 Enter,或从“地址”字段中的下拉列表中选择它。
该地址显示在“ 地址 ”字段中,“ 内存 ”窗口调整为在顶部显示该地址。
自定义“内存”窗口
默认情况下,内存内容以十六进制格式显示为 1 字节整数,窗口宽度会确定所显示的列数。 可以自定义“内存”窗口显示内存内容的方式。
更改内存内容的格式:
- 在“内存”窗口中右键单击,然后从上下文菜单中选择所需的格式。
更改“内存”窗口中的列数:
- 选择“列”字段旁边的下拉箭头,然后选择要显示的列数,或根据窗口宽度选择“自动”进行自动调整。
如果不希望“内存”窗口的内容随着应用运行而更改,则可以关闭实时表达式计算功能。
切换实时评估:
在“内存”窗口中右键单击,然后在上下文菜单中选择“自动重新计算”。
注意
实时表达式计算是一个开关,默认情况下处于打开状态,因此选择“自动重新计算”会将其关闭。 再次选择“自动重新计算”会重新打开。
可以隐藏或显示“内存”窗口顶部的工具栏。 当工具栏隐藏时,无法访问“地址”字段或其他工具。
切换工具栏显示:
- 在“内存”窗口中右键单击,然后在上下文菜单中选择“显示工具栏”。 工具栏将出现或不出现,具体取决于它先前的状态。
跟踪内存中的指针 (C/C++)
在本机代码应用中,可以将寄存器名称用作实时表达式。 例如,可以使用堆栈指针跟踪堆栈。
通过内存跟踪指针:
在“内存”窗口“地址”字段中,输入处于当前范围内的指针表达式。 根据所使用的语言,可能必须取消引用指针。
按 Enter。
当使用调试命令(如“单步执行”)时,“地址”字段中和“内存”窗口顶部显示的内存地址将随指针更改而自动更改。
查看内存指针 (.NET)
如果要基于内存指针(例如从堆快照获取的地址)查看 .NET 对象的内容,可以使用 {CLR}@Address
表示法执行此操作。 地址必须是指向内存的指针,例如 0x1D102A581B0。 使用 {CLR}@Address
表示法在“内存”窗口“地址”字段中输入内存指针。 你也可以使用同一表示法通过监视窗口添加监视。
若要从堆快照获取内存指针地址,请打开堆转储,选择“调试托管内存”,这将打开内存使用情况工具。 右键单击关注的对象,然后选择“查看实例”。