使用监视窗口 - WinDbg (经典)

“监视”窗口显示有关全局变量、局部变量和寄存器的信息。 可以自定义此窗口以显示要跟踪的项。

打开监视窗口

若要打开或切换到“监视”窗口,请在 WinDbg 窗口中的“ 视图 ”菜单上,单击“ 监视”。

还可以按 Alt+2 或单击工具栏上的“ 监视 (Alt+2) ”按钮: 工具栏上“监视”按钮的屏幕截图。

Alt+SHIFT+2 将关闭“监视”窗口。

以下屏幕截图显示了监视窗口的示例。

WinDbg 中示例“监视”窗口的屏幕截图。

监视窗口可以包含四列。 始终显示“名称”和“”列,“类型”“位置”列是可选的。 若要显示 “类型” 和“ 位置 ”列,请分别单击工具栏上的“ Typecast ”和“ 位置” 按钮。

在“监视”窗口中,可以执行以下操作:

  • 若要将变量添加到“监视”窗口,请选择“ 名称” 列中的第一个空单元格,键入变量名称,然后按 Enter。 使用感叹号 () 将模块名称与变量分开。 如果未指定模块,则使用当前模块。 若要在 “名称” 字段中输入地址,地址必须以十进制数字 (开头(如有必要),请使用前缀 0x) 。

    如果输入的变量名称在当前函数的作用域中定义,则其值将显示在 “值 ”列中。 如果未定义, “值”列将显示“错误:无法获取值”。

    即使未定义变量,将其添加到“监视”窗口也很有用。 如果程序计数器输入在其中定义了此名称的变量的函数,则此时其值将显示在窗口中。

  • 若要从“监视”窗口中删除变量,请双击其名称,按 DELETE,然后按 Enter。 还可以将旧名称替换为新名称,方法是双击旧名称,键入新名称,然后按 Enter。

  • 如果变量是数据结构,则其名称旁边会显示一个检查框。 若要展开和折叠结构成员的显示,请选择或清除检查框。

  • int 类型的整数显示为十进制值;UINT 类型的整数显示在当前基数中。 若要更改当前基数,请在“调试器命令”窗口中使用 n (Set Number Base) 命令。

  • 若要更改局部变量的值,请双击其 Value 单元格。 输入新值,或编辑旧值。 (剪切、复制和粘贴命令可用于编辑。) 输入的值可以包含任何 C++ 表达式。 输入新值或编辑旧值后,可以按 Enter 来存储新值,或按 ESC 将其丢弃。 如果提交无效值,则按 Enter 后,旧值将再次出现。

    int 类型的整数显示为十进制值;UINT 类型的整数显示在当前基数中。 若要更改当前基数,请在“调试器命令”窗口中使用 n (Set Number Base) 命令。

  • 如果“监视”窗口中显示 “类型” 列,则 (“类型”列) 显示每个变量的当前数据类型。 每个变量都以适合其自己的数据类型的格式显示。 数据结构在 “类型 ”列中具有其类型名称。 其他变量类型在此列中显示“输入新类型”。

    如果双击“输入新类型”,可以通过输入新的数据类型来强制转换类型。 此强制转换仅在“监视”窗口中更改此变量的当前显示;它不会更改调试器或目标计算机上的任何内容。 此外,如果在 “值 ”列中输入新值,将根据符号的实际类型(而不是在“ 类型 ”列中输入的任何新类型)分析输入的文本。 如果关闭并重新打开“监视”窗口,则会丢失数据类型更改。

    还可以在 “类型” 列中输入扩展命令。 调试器会将符号的地址传递给此扩展,并在当前行下方的一系列可折叠行中显示生成的输出。 例如,如果此行中的符号是线程环境块的有效地址,则可以在“类型”列中输入 !teb,以在此符号的地址上运行 !teb 扩展。

  • 如果 “位置” 列显示在“监视”窗口中,则 (该列) 显示数据结构中每个成员的偏移量。

  • 除了变量,还可以在“监视”窗口中监视以下项:

    • 寄存 器。 将寄存器添加到“监视”窗口时,在其名称前面加上 at 符号 (@) 。 与变量不同,无法通过“监视”窗口更改寄存器值。
    • 包含函数指针的 Vtable。 当 Vtable 出现在“监视”窗口中时,可以浏览表中的函数条目。 如果 Vtable 包含在指向派生实现的基类中,则显示表示法 _vtcast_Class 以指示由于派生类而添加的成员。 这些成员的扩展方式类似于派生类类型。
    • 扩展函数的返回值,例如 _EFN_GetPoolData。

与“ 局部变量”窗口不同,“监视”窗口不受 对寄存器上下文的更改的影响。 在“监视”窗口中,只能查看和修改在当前程序计数器范围内定义的变量。

如果打开新工作区,则“监视”窗口内容将被丢弃,并替换为新工作区中的内容。

工具栏和快捷菜单

“监视”窗口的工具栏包含两个按钮 (TypecastLocations) ,以及一个包含其他命令的快捷菜单。 若要访问菜单,请右键单击窗口的标题栏或单击窗口右上角附近的图标: 用于访问“监视窗口”工具栏快捷菜单的按钮图标的屏幕截图。

工具栏和菜单包含以下按钮和命令:

  • (工具栏和菜单) Typecast 打开和关闭 “类型” 列的显示。

  • (工具栏和菜单) “位置” 打开和关闭“ 位置” 列的显示。

  • (菜单仅) 显示 16 位值,因为 Unicode 在此窗口中显示 Unicode 字符串。 此命令打开和关闭影响 “局部变量”窗口、“监视”窗口和调试器命令输出的全局设置。 此命令等效于使用 .enable_unicode (启用 Unicode 显示) 命令。

  • (菜单仅) 始终在默认基数中显示数字 会导致整数显示在默认基数中,而不是始终以十进制格式显示它们。 此命令打开和关闭影响“局部变量”窗口、“监视”窗口和调试器命令输出的全局设置。 此命令等效于使用 .force_radix_output (将 Radix 用于整数) 命令。

    注意“始终在默认基数中显示数字”命令不会影响长整数。 长整数以十进制格式显示,除非使用 .enable_long_status (启用长整型显示) 命令。 .enable_long_status 命令会影响“局部变量”窗口、“监视”窗口和调试器命令输出中的显示。 在“监视”窗口的菜单中,此命令没有等效项。

  • (菜单仅) 打开所选值的内存窗口 会打开一个新的停靠内存窗口,该窗口显示从所选表达式的地址开始的内存。

  • (菜单仅) 调用所选内存值的 dt 运行 dt (显示类型) 命令,并将所选符号作为其参数。 结果显示在 “调试器命令”窗口中-n 选项会自动用于区分符号和十六进制地址。 不使用其他选项。 请注意,使用此菜单选择生成的内容与从命令行运行 dt 命令时生成的内容相同,但格式略有不同。

  • (菜单仅) 工具栏 打开和关闭工具栏。

  • (菜单仅) 停靠取消停靠 会导致窗口进入或离开停靠状态。

  • (菜单仅) 移动到新扩展坞 会关闭“监视”窗口,并在新扩展坞中打开它。

  • (菜单仅) 设置为窗口类型的选项卡停靠目标 对监视窗口不可用。 此选项仅适用于 “源”“内存” 窗口。

  • (菜单仅) 始终浮动 会导致窗口保持未停靠状态,即使它被拖动到停靠位置。

  • (菜单仅) 移动框架 会导致在移动 WinDbg 帧时窗口移动,即使窗口已取消停靠也是如此。

  • (菜单仅) 帮助 打开 Windows 调试工具文档中的本主题。

  • (菜单仅) 关闭 会关闭此窗口。

另请参阅

有关控制变量的详细信息和其他内存相关命令的说明,请参阅 读取和写入内存。 有关寄存器及其操作的详细信息,请参阅 查看和编辑 WinDbg (经典) 中的寄存器