确定主机和目标
调试器在主机上运行,要调试的代码在目标系统上运行。
调试期间通常会停止处理器上的指令执行,因此通常使用两个计算机系统。但是如果我们的代码需要与低级硬件通信,则尽量不要使用虚拟机。
内核模式和用户模式
“内核模式”是处理器访问模式,操作系统和特权程序以此模式运行。内核模式代码有权访问系统的任何部分,而不像用户模式代码那样受到限制。 内核模式代码可以访问在用户模式或内核模式下运行的任何其他进程的任何部分。 许多核心操作系统功能和许多硬件设备驱动程序在内核模式下运行。
“用户模式”是计算机上的应用程序和子系统运行的模式 。 在用户模式下运行的进程在其自己的虚拟地址空间中运行。 它们受到限制,无法直接访问系统的许多部分,包括系统硬件、未分配给它们使用的内存以及可能损害系统完整性的系统其他部分。 由于以用户模式运行的进程与系统和其他用户模式进程有效隔离,因此它们不能干扰这些资源。
调试环境
WinDbg预览版
WinDbg 预览版是最新版本的 WinDbg,具有更多新式视觉对象、更快的 windows。
WinDbg
Microsoft Windows 调试器 (WinDbg) 是一个支持用户模式和内核模式调试的基于 Windows 的调试器。 WinDbg 为 Windows 内核、内核模式驱动程序和系统服务以及用户模式应用程序和驱动程序提供调试。对于内核模式调试,WinDbg 通常需要 (主计算机和目标计算机) 两台计算机。 WinDbg 还支持用户模式和内核模式目标的各种远程调试选项。
WinDbg 是与 CDB/NTSD 和 KD/NTKD 对应的图形接口。
KD
Microsoft 内核调试器 (KD) 是基于字符的控制台程序,可对所有基于 NT 的操作系统上的内核模式活动进行深入分析。
NTKD
是KD调试器的变体。
CDB
Microsoft 控制台调试器 (CDB) 是基于字符的控制台程序,可实现对 Windows 用户模式内存和构造的低级别分析。
配置符号
若要使用 WinDbg 提供的所有高级功能,必须加载正确的符号。 如果没有正确配置符号,则在尝试使用依赖于符号的功能时,将收到指示符号不可用的消息。
链接应用程序、库、驱动程序或操作系统时,创建 .exe 和 .dll 文件的链接器还会创建多个称为符号文件的附加文件。符号文件保存多个数据,这些数据在运行二进制文件时实际上并不需要,但在调试过程中非常有用。符号文件包含:全局变量、局部变量、函数名称和入口点标志等等,每个项分别称为一个符号。
编译器和链接器控制符号格式。 可视化C++链接器会将所有符号置于 .pdb 文件中。