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