文档介绍:第第第30 章章章 WinDBG 用法详解
WinDBG 是个非常强大的调试器,它设计了极极其丰富的功功能来来支持各种调试任务务,包包括用户
态调试、内核态调试、调试转储文件、远程调试等等。WinDBG 具有非常大的灵活性和和可扩展性,
用来来满足各种各样的调试需求,比如用户可以自由定义调试事件的处理方式,编写调试扩展模块
来来定制制和和补充 WinDBG 的调试功功能。
尽管 WinDBG 是个典型的窗口程序,但是它的大多数调试功功能还是以手工输入命命令的方式来来
工作的。目前前版本本的 WinDBG 共提供了 20 多条条标标准命命令,140 多条条元命命令(mands ),
和和难以计数的大量扩展命命令。学习和和灵活使用这些命命令是学习 WinDBG 的关键,也是难点。
上一章我们从设计的角度分析析了 WinDBG ,本本章将从使用(用户)的角度介绍 WinDBG 。我
们先介绍工作空间的概念和和用法(第 1 节),然后介绍命命令的分类和和不同种类的命命令提示符(第 2
节)。第 3 节介绍不同的调试模式,也就是如何与不同特征的调试目标标建立调试会话。第 4 节介绍
上下文的概念和和在调试时应该如何切换和和控制制上下文。第 5 节介绍调试事件和和如何定制制调试事件
的处理方式。从第 6 节到到第 9 节我们将分别介绍如何在 WinDBG 中完成典型的调试操作,比如控
制制调试目标标(第 6 节)、设置断点(第 7 节)、观察栈栈(第 8 节)以及如何观察和和修改数据(第 9
节)。
工作空间
WinDBG 使用工作空间(Workspace )来来描述和和存储一个调试项目的属性、参数、以及调试器
设置等信息。其功功能类似于集成开发环境的项目文件。
分类
WinDBG 定义了两种工作空间,一种称为缺省的工作空间(Default Workspace ),另一种称为
命命名的工作空间(Named Workspace )。当没有明确使用某某个命命名的工作空间时,WinDBG 总是使
用缺省的工作空间,因此缺省的工作空间也叫隐含的(implicit )工作空间,命命名的工作空间也叫
显式的(explicit )工作空间。
WinDBG 安装时就预先创建了一系列缺省的工作空间,分别是:
基础工作空间(base workspace ),当调试会话尚未建立,WinDBG 处于模糊状态时,它
会使用基础工作空间。
缺省的内核态工作空间(default kernel-mode workspace ),当在 WinDBG 中开始内核调试,
但是尚未与调试目标标建立起联系时,WinDBG 会缺省使用这个工作空间。
缺省的远程调试工作空间(remote default workspace ),当通过调试服务务器(DbgSrv 或
KdSrv )进行远程调试时,WinDBG 会缺省使用这个工作空间。
特定处理器的工作空间(processor-specific workspace ),在进行内核调试时,当 WinDBG
与调试目标标建立起联系,并知道对方的处理器类型后,WinDBG 会缺省使用其对应处理
器类型的工作空间。典型的处理器类型有 x86 、AMD64 、Itanium 等。
缺省的用户态工作空间(default user-mode workspace ),当 WinDBG 正在附加加到到一个用
户态进程的过程中时,它会使用这个工作空间。
1
相对于可执行文件的缺省工作空间,当在用户态调试时,一旦 WinDBG 知道了调试目标标
的可执行文件名后(对于附加加到到已经运行的进程,是附加加到到进程后,对于调试新运行的
程序,那么是选定程序文件后),它就会使用这个可执行文件所对应的工作空间,如果果这
个工作空间已经存在,那么它就用存在的,如果果不存在,那么就创建一个新的。
相对于转储文件(dump file )的工作空间,在分析析转储文件时,WinDBG 会为每个转储
文件建立和和维护一个工作空间。
在通过 WinDBG 文件菜单的 Save workspace as…命命令调出的 Save Workspace As 对话框的标标题
中包包含了 WinDBG 当前前所使用工作空间的名字。当 WinDBG 切换到到一个新的工作空间或者退出
前前通常也会提示是否要保存工作空间,提示对话框(图 30-8)的标标题中包包含了工作空间的名字。
图 30-1 切换或者关闭调试会话时 WinDBG 提示是否要保存工作空间
将当前前工作空间另存为一个特定的名字