在 WinDbg (经典) 中查看和编辑寄存器
寄存器是位于 CPU 上的小型易失性内存单元。 许多寄存器专用于特定用途,其他寄存器可供用户模式应用程序使用。 基于 x86 和基于 x64 的处理器具有可用的寄存器的不同集合。 有关每个处理器上的寄存器的详细信息,请参阅 处理器体系结构。
在 WinDbg 中,可以通过输入命令、使用“寄存器”窗口或使用“监视窗口”来查看和编辑寄存器。
命令
可以通过在“调试器命令”窗口中输入 r (Registers) 命令来查看和编辑寄存器。 可以使用多个选项或使用 rm (Register Mask) 命令自定义显示。
每次目标停止时,也会自动显示寄存器。 如果使用 p (Step) 或 t (Trace) 命令单步执行代码,则每个步骤都会显示寄存器。 若要停止此显示,请在使用这些命令时使用 r 选项。
在基于 x86 的处理器上, r 选项还控制多个称为标志的一位寄存器。 若要更改这些标志,请使用与更改常规寄存器时略有不同的语法。 有关这些标志的详细信息和此语法的说明,请参阅 x86 Flags。
寄存器窗口
打开“寄存器”窗口
若要打开或切换到“寄存器”窗口,请从“视图”菜单中选择“寄存器”。 (还可以按 Alt+4 或选择工具栏上的“ 注册 ”按钮。Alt+Shift+4 关闭“寄存器”窗口。)
以下屏幕截图显示了“寄存器”窗口的示例。
“寄存器”窗口包含两列。 Reg 列列出目标处理器的所有寄存器。 “ 值” 列显示每个寄存器的当前值。 此窗口还包含用于打开“自定义注册列表”对话框的工具栏上的“自定义”按钮。
使用“寄存器”窗口
在“寄存器”窗口中,可以执行以下操作:
“ 值” 列显示每个寄存器的当前值。 最近更改的寄存器的值以红色文本显示。
- 若要输入新值,请双击 “值” 单元格,然后键入新值或编辑旧值。 (剪切、复制和粘贴命令可用于编辑。)
- 若要保存新值,请按 Enter。
- 若要放弃新值,请按 ESC。
- 如果键入无效值,则按 Enter 时,旧值将重新出现。
寄存器值显示在当前基数中,并且必须在相同的基数中键入新值。 若要更改当前基数,请在“调试器命令”窗口中使用 n (Set Number Base) 命令。
在用户模式下,“寄存器”窗口显示与当前线程关联的寄存器。 有关当前线程的详细信息,请参阅 控制进程和线程。
在内核模式下,“寄存器”窗口显示与当前 寄存器上下文关联的寄存器。 可以设置寄存器上下文以匹配特定的线程、上下文记录或陷阱帧。 实际仅显示指定寄存器上下文的最重要寄存器;无法更改其值。
“寄存器”窗口有一个工具栏,其中包含“ 自定义 ”按钮,并具有包含其他命令的快捷菜单。 若要访问菜单,请选择并按住 (右键单击标题栏) ,或选择窗口右上角附近的图标 (
(工具栏和菜单) “自定义” 将打开“ 自定义注册列表 ”对话框,本主题的下一节对此进行介绍。
仅 (菜单) 工具栏 打开和关闭工具栏。
(菜单仅) 停靠 或 取消停靠 会导致窗口进入或离开停靠状态。
(菜单仅) 移动到新扩展坞 会关闭“寄存器”窗口并在新扩展坞中打开它。
(菜单仅) 设置为窗口类型的选项卡停靠目标 对于“寄存器”窗口不可用。 此选项仅适用于“源”或“内存”窗口。
(菜单仅) 始终浮动 会导致窗口保持取消停靠状态,即使它被拖动到停靠位置。
(菜单仅) 移动框架 会导致在移动 WinDbg 框架时窗口移动,即使窗口已取消停靠也是如此。
(菜单“仅) 帮助 ”打开 Windows 调试工具文档中的本主题。
(菜单仅) 关闭 关闭此窗口。
“自定义注册列表”对话框
若要更改显示的寄存器列表,请选择“ 自定义 ”按钮。 将显示“ 自定义注册列表 ”对话框。
在此对话框中,可以编辑寄存器列表以更改寄存器的显示顺序。 (实际上无法从列表中删除寄存器;如果这样做,它将在末尾重新出现。) 寄存器名称之间必须有一个空格。
如果选择“首先检查显示修改的寄存器值”框,则最近更改其值的寄存器将显示在顶部。
如果选择“不显示子注册检查”框,则不会显示子注册。 例如,将显示 eax ,但不会显示 ax、 ah 或 al。
选择 “确定” 保存更改,或 选择“取消” 以放弃更改。
如果要调试具有多种处理器的多处理器计算机,WinDbg 将单独存储每种处理器类型的自定义设置。 通过这种分离,可以同时自定义每个处理器寄存器的显示。
监视窗口
在 WinDbg 中,可以使用“监视”窗口显示寄存器。 不能使用“监视”窗口更改寄存器的值。
若要打开“监视”窗口,请从“视图”菜单中选择“监视”。 还可以按 Alt+2 或选择工具栏上的“ 监视 ”按钮:
以下屏幕截图显示了“监视”窗口的示例。
另请参阅
有关寄存器上下文和其他上下文设置的详细信息,请参阅 更改上下文。