1
第
第第
第30章
章章
章
WinDBG 用法
用法用法
用法详解
详解详解
详解
WinDBG 是个非常强大的调试器,它设计了极其丰富的功能来支持各种调试任务,包括用户
态调试、内核态调试、调试转储文件、远程调试等等。WinDBG 具有非常大的灵活性和可扩展性,
用来满足各种各样的调试需求,比如用户可以自由定义调试事件的处理方式,编写调试扩展模块
来定制和补充 WinDBG 的调试功能。
尽管 WinDBG 是个典型的窗口程序,但是它的大多数调试功能还是以手工输入命令的方式来
工作的。目前版本的 WinDBG 共提供了 20 多条标准命令,140 多条元命令(Meta-commands),
和难以计数的大量扩展命令。学习和灵活使用这些命令是学习 WinDBG 的关键,也是难点。
上一章我们从设计的角度分析了 WinDBG,本章将从使用(用户)的角度介绍 WinDBG。我
们先介绍工作空间的概念和用法(第 1 节),然后介绍命令的分类和不同种类的命令提示符(第 2
节)。第 3 节介绍不同的调试模式,也就是如何与不同特征的调试目标建立调试会话。第 4 节介绍
上下文的概念和在调试时应该如何切换和控制上下文。第 5 节介绍调试事件和如何定制调试事件
的处理方式。从第 6 节到第 9 节我们将分别介绍如何在 WinDBG 中完成典型的调试操作,比如控
制调试目标(第 6 节)、设置断点(第 7 节)、观察栈(第 8 节)以及如何观察和修改数据(第 9
节)。
30.1 工作空间
工作空间工作空间
工作空间
WinDBG 使用工作空间(Workspace)来描述和存储一个调试项目的属性、参数、以及调试器
设置等信息。其功能类似于集成开发环境的项目文件。
30.1.1 分类
分类分类
分类
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 正在附加到一个用
户态进程的过程中时,它会使用这个工作空间。