在WinDbg中,可以使用“监视”窗口显示和更改全局和局部变量和寄存器信息。 您可以自定义此窗口以显示您正在跟踪的项。。“监视”窗口可以显示所需的任何变量列表。这些变量可以包括来自任何函数的全局变量和局部变量。任何时候,“监视”窗口都会显示与当前函数范围匹配的变量值。也可以通过“监视”窗口更改这些变量的值。

如何打开监视窗口

  • 通过菜单View--->Watch
  • 快捷键Alt+2
  • 通过工具栏

监视窗口

通过上面的方式打开的窗口如下:

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

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

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

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

    即使未定义变量,它可将其添加到监视窗口。 如果程序计数器输入在其中定义此名称的变量的函数,其值将出现在窗口中在该时间。

  • 要从监视窗口中删除变量,请双击其名称,按 DELETE 键,然后按 ENTER。 通过双击旧名称,键入新名称,然后按 ENTER,也可以使用新名称替换旧名称。

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

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

  • 若要更改本地变量的值,请双击其单元格。 输入新值,或编辑旧值。 (剪切、 复制和粘贴命令是可用来进行编辑。)您输入的值可以包含任何C++表达式。 输入新值或编辑旧值后,您可以按 enter 键来存储新值或按 esc 键放弃它。 如果提交无效的值后按 ENTER,,将重新出现的旧值。

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

  • 类型列 (如果它显示在监视窗口中) 显示每个变量的当前数据类型。 每个变量显示在其自己的数据类型为正确的格式。 数据结构具有其类型名类型列。 其他变量的类型显示在此列中的"输入新的类型"。

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

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

  • 位置列 (如果它显示在监视窗口中) 显示了一种数据结构的每个成员的偏移量。

  • 除了变量之外,还可以监视监视窗口中的以下项:

    • 注册。 当将寄存器添加到监视窗口中时,其名称加上前缀 at 符号 (@)。 与变量不同,不能更改寄存器值通过监视窗口。
    • 包含函数的指针的 Vtable。 当 Vtable 出现在监视窗口中时,您可以浏览表中的函数条目。 如果在指向派生的实现,表示法的基类中包含 Vtable _vtcast_显示来指示要添加的成员由于派生类中。 这些成员展开类似于派生的类类型。
    • 扩展插件的返回值函数,如_EFN_GetPoolData。

与“局部”窗口不同,“监视”窗口不受寄存器上下文更改的影响。在监视窗口中,您只能查看和修改在当前程序计数器范围内定义的变量。如果打开新工作区,监视窗口内容将被丢弃并替换为新工作区中的内容。

Windbg Watch(监视)窗口的使用的更多相关文章

  1. Windbg Locals(局部变量)窗口的使用

    在WinDbg中,可以通过输入命令.使用“局部变量”窗口或使用“监视”窗口查看局部变量.局部变量窗口显示当前作用域中的本地变量的所有信息. 如何打开Locals窗口 通过菜单View--->Lo ...

  2. VS中监视窗口,即时窗口和输出窗口的使用

    一.监视窗口 1.配置应用程序,使应用程序处于调试状态. 2.点击“调试”----“窗口”----“监视”----“监视1”,打开监视窗口. 3.在监视窗口中“名称”栏中输入变量名称或html元素id ...

  3. 关于 VS2013监视窗口的内存面板及寄存器面板

    1.插入断点,按F5调试,2.选择菜单项 debug-窗口-3.即可找到您要的监视窗口.

  4. VS调试 ---- 监视窗口、即时窗口、输出窗口

    一.监视窗口1.配置应用程序,使应用程序处于调试状态.2.点击“调试”----“窗口”----“监视”----“监视1”,打开监视窗口.3.在监视窗口中“名称”栏中输入变量名称或html元素id,可查 ...

  5. Visual Studio 调试系列6 监视变量(使用监视窗口和快速监视窗口)

    系列目录     [已更新最新开发文章,点击查看详细] 当你进行调试时,可以使用 监视窗口 和 快速监视窗口 来监视变量和表达式. 仅在调试会话期间,这两个窗口才可用. 监视窗口可以在调试时一次显示多 ...

  6. Windbg Memory(内存)窗口的使用

    在 WinDbg 中,可以查看和编辑内存,通过输入命令或通过使用内存窗口. 内存窗口的打开 通过菜单View-->Memory 通过快捷键Alt+5 通过工具栏 使用内存窗口 通过上面方式打开的 ...

  7. Windbg Register(寄存器)窗口的使用

    寄存器是位于在 CPU 的小易失性内存单位. 许多寄存器专用于特定用途,并可用于用户模式应用程序使用的其他寄存器. 基于 x86 和基于 x64 的处理器在有可用的寄存器的不同集合. 如何打开寄存器窗 ...

  8. WinDbg命令窗口的使用

    调试器命令窗口是windbg中的主要调试信息窗口.可以在此窗口中输入调试程序命令并查看命令输出.Windbg的命令窗口是我们进行调试时,主要打交道的窗口.界面如下 对于windbg,“调试器命令窗口” ...

  9. 第二章排错的工具:调试器Windbg(上)

    感谢博主 http://book.51cto.com/art/200711/59731.htm <Windows用户态程序高效排错>第二章主要介绍用户态调试相关的知识和工具.本文主要讲了排 ...

随机推荐

  1. 从头学一次J2EE笔记

    1.在Servlet3.5规范之前,Java Web 应用的绝大部分组件都通过web.xml 文件来配置管理, Servlet3.0 规范可通过Annotation来配置管理Web组件,因此web.x ...

  2. kubernetes实战(九):k8s集群动态存储管理GlusterFS及使用Heketi扩容GlusterFS集群

    1.准备工作 所有节点安装GFS客户端 yum install glusterfs glusterfs-fuse -y 如果不是所有节点要部署GFS管理服务,就在需要部署的节点上打上标签 [root@ ...

  3. C#程序只允许运行一个实例的解决方案

    最近在做winform的程序中,需要只能打开一个程序,如果已经存在,则激活该程序的窗口,并显示在最前端.在网上google了一哈,找到了很多的解决方案.这里我整理了3种方案,并经过了测试,现和朋友们分 ...

  4. 【javascript】判断是否为正整数

    function isNormalInteger(str) { var n = Math.floor(Number(str)); return n !== Infinity && St ...

  5. js 编译原理

    引擎:从头到尾负责整个javaScript 程序的编译过程和执行过程. 编译器: 负责语法分析以及代码的生成. 作用域:负责收集并维护由所有声明的标识符(变量)组成的一系列查询, 并实施一套非常严格的 ...

  6. 集合类源码(七)Map(ConcurrentHashMap, ConcurrentSkipListMap, TreeMap)

    ConcurrentHashMap 内部结构 在JDK1.8之前的实现结构是:ReentrantLock+Segment+HashEntry+链表 JDK1.8之后的实现结构是:synchronize ...

  7. Idea java 中导包路径分析

    工具类所在包: 查看工具类详情: 调用这个工具类时,导入的包路径为: 路径就是第1张图片中的包名utils+类名NumberUtils组成的utils.NumberUtils

  8. 一个简单的利用 HttpClient 异步下载的示例

    可能你还会喜欢 一个简单的利用 WebClient 异步下载的示例  ,且代码更加新. 1. 定义自己的 HttpClient 类. using System; using System.Collec ...

  9. centos7.x下环境搭建(二)—nginx安装

    上篇文章是对mysql的安装,接着上篇文章,这篇文章安装nginx服务 添加yum源 默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址.因此可以如下执行命令添 ...

  10. tkmybatis VS mybatisplus

    本文是简单对比了以下官网上的内容 文章目录 TkMybatis Vs MybatisPlus 1.基础CRUD BaseMapper 2.代码生成器 3. 全局主键 Sequence主键 4. 热加载 ...