开始使用 Windows 调试
本文介绍如何开始使用 Windows 调试。 如果你的目标是使用调试器分析故障转储,请参阅使用 WinDbg 分析故障转储文件。
要开始使用 Windows 调试,请完成以下步骤。
1. 标识主系统和目标系统
调试时通常使用两个独立的计算机系统,因为在调试过程中,处理器上的指令执行通常会暂停。 调试器在“主机”系统上运行,要调试的代码在“目标”系统上运行。
主系统 <--------------------------------------------------> 目标系统
在某些情况下,可以使用虚拟机作为第二个系统。 例如,虚拟电脑可以与需要调试的代码运行在同一台电脑上。 但是,如果代码与低级别硬件通信,使用虚拟电脑可能不是最佳方法。 有关详细信息,请参阅设置虚拟机的网络调试 - KDNET.
2. 确定调试器类型:内核模式或用户模式
接下来,需要确定是使用内核模式调试还是用户模式调试。
操作系统和特权程序在内核模式下运行。 内核模式代码有权访问系统的任何部分,并且不像用户模式代码那样受到限制。 内核模式代码可以访问在用户模式或内核模式下运行的任何其他进程的任何部分。 许多核心操作系统功能和许多硬件设备驱动程序在内核模式下运行。
计算机上的应用程序和子系统在用户模式下运行。 在用户模式下运行的进程在其自己的虚拟地址空间中运行。 它们被限制直接访问系统的许多部分,包括系统硬件、未分配供其使用的内存以及可能危及系统完整性的系统其他部分。 在用户模式下运行的进程与系统和其他用户模式进程有效隔离,因此它们不会干扰这些资源。
如果你的目标是调试驱动程序,请确定该驱动程序是内核模式驱动程序还是用户模式驱动程序。 Windows 驱动程序模型 (WDM) 驱动程序与内核模式驱动程序框架 (KMDF) 都是内核模式驱动程序。 顾名思义,用户模式驱动程序框架 (UMDF) 驱动程序是用户模式驱动程序。
由于某些问题,可能很难确定代码以何种模式执行。 在这种情况下,可能需要选择一种模式,查看在该模式下可以获得哪些信息。 有些问题需要在用户模式和内核模式下使用调试器。
根据调试模式的不同,可能需要以不同的方式配置和使用调试器。 有些调试命令在两种模式下的操作相同,有些命令的操作则不同。
了解有关在内核模式下使用调试器的详细信息:
了解有关在用户模式下使用调试器的详细信息:
3. 选择调试器环境
WinDbg 调试器在大多数情况下都运行良好,但有时可能需要使用其他调试器,例如用于自动化或 Visual Studio 的控制台调试器。 有关详细信息,请参阅调试环境。
4. 确定如何连接目标和主机
通常,目标和主机系统通过以太网连接。 如果正在进行早期调试工作,或者设备上没有以太网连接,还可以使用其他网络连接选项。 有关详细信息,请参阅以下文章:
5. 选择 32 位或 64 位调试工具
是需要 32 位还是 64 位调试器取决于在目标系统和主机系统上运行的 Windows 版本,以及调试的是 32 位还是 64 位代码。 有关详细信息,请参阅选择 32 位或 64 位调试工具。
6. 配置符号
若要使用 WinDbg 提供的所有高级功能,必须加载正确的符号。 如果没有正确配置符号,则在尝试使用依赖于符号的功能时,将收到指示符号不可用的消息。 有关详细信息,请参阅用于 Windows 调试的符号。
7. 配置源代码
如果目标是调试自己的源代码,则需要配置指向源代码的路径。 有关详细信息,请参阅源路径。
8. 熟悉调试器操作
本文档的调试器操作部分描述了各种任务的调试器操作。 例如,加载调试器扩展 DLL 说明了如何加载调试器扩展。
9. 熟悉调试方法
标准调试方法适用于大多数调试方案,例如,设置断点、检查调用堆栈和查找内存泄漏。 专业调试方法适用于特定的技术或代码类型。 例如,即插即用调试、KMDF调 试和 RPC 调试。
10. 使用调试器引用命令
在调试器中工作时,可以使用不同的调试命令。 在调试器中使用 .hh 命令可显示有关任何调试命令的有用信息。 有关可用命令的详细信息,请参阅调试器参考。
11. 将调试扩展用于特定技术
有多个调试扩展可用于分析特定于域的数据结构。 有关详细信息,请参阅专用扩展。
12. 了解相关的 Windows 内部结构
本文档假定你已了解一些 Windows 核心内部知识。 要了解有关 Windows 内部的详细信息,包括内存使用情况、上下文、线程和进程,可以查看 Pavel Yosifovich、Mark E. Russinovich、David A. Solomon 和 Alex Ionescu 编写的 Windows Internals 等资源。
13. 查看其他调试资源
其他资源包括以下书籍和视频:
- 《在 Windows 调试中:实用的调试和跟踪策略》,作者:Tarik Soulami
- 《高级 Windows 调试》,作者:Mario Hewardt 和 Daniel Pravat
- 碎片整理工具视频系列,第 13 集至第 29 集,全部与 WinDbg 有关