本文介绍如何开始使用 WinDbg 和其他调试工具进行 Windows 调试。 你将了解如何:
- 安装调试器并设置主机和目标系统
- 配置调试环境
- 掌握内核模式和用户模式方案的基本调试技术
注意: 如果您想要分析崩溃转储,请参阅 使用 WinDbg 分析崩溃转储文件。
若要开始使用 Windows 调试,请完成以下步骤。
1.安装 Windows 调试器
安装 WinDbg 以开始调试 Windows 应用程序和驱动程序。 有关详细安装步骤,请参阅 “安装 WinDbg”。
2. 标识主机和目标系统
两个单独的计算机系统通常用于调试,因为处理器上的指令执行通常在过程中暂停。 调试器在 主机 系统上运行,并且要调试的代码在 目标 系统上运行。
主机 <--------------------------------------------------> 目标
在某些情况下,可以使用虚拟机作为第二个系统。 例如,虚拟电脑可以在与需要调试的代码相同的电脑上运行。 但是,如果代码与低级别硬件通信,则使用虚拟电脑可能不是最佳方法。 有关详细信息,请参阅 设置虚拟机的网络调试 - KDNET。
3.确定调试器类型:内核模式或用户模式
接下来,需要确定是使用内核模式还是用户模式调试。
作系统和特权程序在 内核模式下运行。 内核模式代码有权访问系统的任何部分,并且不受限制,如用户模式代码。 内核模式代码可以访问在用户模式或内核模式下运行的任何其他进程的任意部分。 大部分核心 OS 功能和许多硬件设备驱动程序在内核模式下运行。
计算机上的应用程序和子系统以 用户模式运行。 在用户模式下运行的进程在其自己的虚拟地址空间中运行。 它们被限制直接访问系统的多个部分,包括系统硬件、未分配给它们使用的内存以及可能损害系统完整性的其他部分。 在用户模式下运行的进程与系统和其他用户模式进程有效隔离,因此它们不会干扰这些资源。
如果目标是调试驱动程序,请确定驱动程序是内核模式驱动程序还是用户模式驱动程序。 Windows 驱动程序模型(WDM)驱动程序和 Kernel-Mode 驱动程序框架(KMDF)都是内核模式驱动程序。 顾名思义,User-Mode 驱动程序框架(UMDF)驱动程序是用户模式驱动程序。
对于某些问题,很难确定代码的执行模式。 在这种情况下,可能需要选择一种模式,并查看该模式下可用的信息。 某些问题需要在用户模式和内核模式下使用调试器。
根据你在其中调试的模式,可能需要以不同的方式配置和使用调试器。 某些调试命令在两种模式下运行相同,某些命令以不同的方式运行。
内核模式调试的后续步骤
- WinDbg 入门 (内核模式) - 完成安装和第一个调试会话
- 调试通用驱动程序:分步实验室(回显内核模式) - 带回显驱动程序的动手实验室
- 调试驱动程序:分步实验室(Sysvad 内核模式) - 具有音频驱动程序的动手实验室
用户模式调试的后续步骤
- WinDbg 入门 (用户模式) - 完成设置和第一个调试会话
4.选择调试器环境
在大多数情况下,WinDbg 调试器效果良好,但有时你可能想要使用另一个调试器,例如用于自动化或 Visual Studio 的控制台调试器。 有关详细信息,请参阅 调试环境。
5.确定如何连接目标和主机
通常,使用以太网网络连接目标和主机系统。 如果在进行早期启动工作,或者设备上没有以太网连接,则可以使用其他网络连接选项。 有关详细信息,请参阅以下文章:
6.选择 32 位或 64 位调试工具
是否需要 32 位或 64 位调试器取决于在目标和主机系统上运行的 Windows 版本,以及调试 32 位还是 64 位代码。 有关详细信息,请参阅 选择 32 位或 64 位调试工具。
7. 配置符号
若要使用 WinDbg 提供的所有高级功能,必须加载正确的符号。 如果未正确配置符号,则会收到指示在尝试使用依赖于符号的功能时符号不可用的消息。 有关详细信息,请参阅 Windows 调试的符号。
8.配置源代码
如果目标是调试自己的源代码,则需要配置源代码的路径。 有关详细信息,请参阅 源路径。
熟悉调试器的操作
本文档的 “调试器作 ”部分介绍各种任务的调试器作。 例如, 在 WinDbg 中保留日志文件 描述 WinDbg 如何编写记录调试会话的日志文件。
10. 熟悉调试技术
标准调试技术 适用于大多数调试方案,示例包括设置断点、检查调用堆栈和查找内存泄漏。 专用调试技术 适用于特定技术或代码类型。 示例包括即插即用调试、KMDF 调试和 RPC 调试。
11. 使用调试器参考命令
在调试器中工作时,可以使用不同的调试命令。 若要在调试时获取任何命令的帮助,请使用 .hh 后接命令名称。
示例:
.hh bp # Get help on breakpoint commands
.hh k # Get help on call stack commands
有关可用命令的完整列表,请参阅 调试器参考。
12. 对特定技术使用调试扩展
可以使用多个调试扩展来分析特定于域的数据结构。 有关详细信息,请参阅 专用扩展。 有关如何加载调试器扩展的信息,请参阅 加载调试器扩展 DLL。
13. 了解相关的 Windows 内部机制
本文档假定你对核心 Windows 内部有一些了解。 若要详细了解 Windows 内部,包括内存使用情况、上下文、线程和进程,可以查看帕维尔·约西夫维奇、Mark E.Russinovich、David A.所罗门和 Alex Ionescu 等资源 。
14. 查看其他调试资源
其他资源包括以下书籍和视频:
- Windows 调试内幕:Tarik Soulami 撰写的实用调试和跟踪策略
- 高级 Windows 调试 由 Mario Hewardt 和 Daniel Pravat 所著
- Defrag Tools 视频系列,第 13 到 29 集,全部关于 WinDbg
后续步骤
选择调试模式以继续:
内核模式调试 (适用于驱动程序和 OS 组件):
用户模式调试 (适用于应用程序):
其他设置指南: