在WinDbg中,可以通过输入命令、使用“局部变量”窗口或使用“监视”窗口查看局部变量。局部变量窗口显示当前作用域中的本地变量的所有信息。
如何打开Locals窗口
- 通过菜单View--->Locals
- 通过快捷键Al+3
- 通过工具栏
局部变量窗口
通过上面的方式打开的窗口如下:
在局部变量窗口中,可以执行以下操作:
-
名称列显示每个本地变量的名称。 如果变量是一种数据结构,其名称旁边显示复选框。 若要展开或折叠结构成员的显示,请选择或清除该复选框。
-
值列显示每个变量的当前值。
- 若要为变量输入新值,双击当前值并键入新值,或编辑旧值。 (剪切、 复制和粘贴命令是可用来进行编辑。)您可以键入任何C++表达式。
- 若要保存新值,请按 ENTER。
- 若要放弃的新值,请按 ESC。
- 如果键入无效的值,按 ENTER 键时,将重新出现的旧值。
类型的整数int显示为十进制值; 类型的整数UINT显示在当前的基数。 若要更改当前的基数,请使用 n (设置数量 Base) 命令在调试器命令窗口中。
-
类型列 (如果它显示在局部变量窗口中) 显示每个变量的当前数据类型。 每个变量显示在其自己的数据类型为正确的格式。 数据结构具有其类型名类型列。 其他变量的类型显示在此列中的"输入新的类型"。
如果您双击"输入新类型",您可以通过输入新的数据类型强制转换类型。 此强制转换更改仅在局部变量窗口中; 此变量的当前显示它不会更改任何内容在调试器中或在目标计算机上。 此外,如果输入中的新值值列中,你输入的文本将分析基于符号的实际类型而不是任何新型中输入类型列。 如果关闭并重新打开局部变量窗口,您将丢失的数据类型更改。
您还可以输入中的扩展命令类型列。 调试器会将该符号的地址传递到此扩展插件,并将在一系列的当前行下方的可折叠行中显示生成的输出。 例如,如果在此行中的符号是有效的线程环境块的地址,则可以输入 ! teb中类型列来运行 ! teb 此符号的地址上的扩展。
-
位置列 (如果它显示在局部变量窗口中) 显示了一种数据结构的每个成员的偏移量。
-
如果本地变量是一个包含 Vtable,类的实例名称列显示 Vtable,并且可以扩展 Vtable 以显示函数指针。 如果在指向派生的实现,表示法的基类中包含 Vtable _vtcast_类显示来指示添加,则由于派生类的成员。 这些成员展开类似于派生的类类型。
局部变量窗口有一个包含两个按钮的工具栏 (Typecast并位置) 以及一个具有其他命令的快捷菜单。 若要访问菜单,请右键单击该窗口的标题栏或单击窗口右上角附近的图标 ()。 工具栏和菜单包含以下按钮和命令:
-
(工具栏和菜单)Typecast将显示类型列打开和关闭。
-
(工具栏和菜单)位置将显示位置列打开和关闭。
-
(仅限菜单)显示 16 位值作为 Unicode此窗口中显示的 Unicode 字符串。 此命令将打开和关闭全局设置,它会影响局部变量窗口、 监视窗口和调试器命令输出。 此命令相当于使用 .enable_unicode (启用 Unicode 显示器) 命令。
-
(仅限菜单)始终显示在默认数字基数导致要在显示中而不是以十进制格式显示它们的默认基数的整数。 此命令将打开和关闭全局设置,它会影响局部变量窗口、 监视窗口和调试器命令输出。 此命令相当于使用 .force_基数_输出 (使用基数范围内的整数) 命令。
请注意 始终显示在默认数字基数命令不会影响长整数。 除非以十进制格式显示长整数 .enable_长_状态 (启用长整数的显示) 命令集。 .Enable_长_状态命令会影响显示在局部变量窗口中,监视窗口和调试器命令输出中; 没有为此命令在局部变量窗口中的菜单中没有等效项。
-
(仅限菜单)选定的值为打开内存窗口将打开新的停靠的内存窗口,显示所选表达式的地址处开始的内存。
-
(仅限菜单)调用所选的内存值的 dt运行 dt (显示类型) 命令与所选符号作为其参数。 调试器命令窗口中显示结果。 -N选项自动用于将符号与十六进制地址区分开来。 未不使用任何其他选项。 请注意,使用此菜单选项生成的内容是与运行时生成的内容相同dt命令从命令行中,但格式会略有不同。
-
(仅限菜单)工具栏工具栏,开启和关闭。
-
(仅限菜单)停靠或取消停靠将使窗口进入或离开停靠的状态。
-
(仅限菜单)移到新停靠局部变量窗口将关闭,并将其打开新的平台中。
-
(仅限菜单)设置为选项卡形式停靠为窗口中,键入目标局部变量窗口不可用。 此选项才可用的源或内存窗口。
-
(仅限菜单)始终浮点将使窗口停靠,即使仍拖到停靠位置。
-
(仅限菜单)移动与帧将使窗口移动时移动的 WinDbg 帧,即使在窗口已解除固定。
-
(仅限菜单)帮助有关 Windows 调试工具文档中打开此主题。
-
(仅限菜单)关闭关闭此窗口。
其他说明
本地上下文确定哪些组的本地变量将显示在局部变量窗口。 当本地上下文的任何原因发生更改时,会自动更新局部变量窗口。 默认情况下,本地上下文与匹配程序计数器的当前位置。 也就是说当我们如果执行~0s切换线程或.cxr切换上下文等指令时,如果此时窗口打开,那么窗口内容将会改变。