调试环境

有六种可用的调试环境:

  • WinDbg
  • WinDbg (Classic)
  • 内核调试器 (KD)
  • NTKD
  • 控制台调试器 (CDB)
  • NT 符号调试器 (NTSD)

以下部分介绍调试环境。

WinDbg

WinDbg 是 WinDbg 的最新版本,具有新式视觉效果、更快的窗口速度和成熟的脚本体验,使用可扩展的调试器数据模型构建。 WinDbg 使用与 WinDbg (Classic) 相同的基础引擎,因此用户所习惯使用的所有命令、扩展和工作流程仍可正常工作。

有关详细信息,请参阅 WinDbg 功能

WinDbg (Classic)

Microsoft Windows 调试器 WinDbg (Classic) 是一种基于 Windows 的调试器,可进行用户模式和内核模式调试。 WinDbg 可对 Windows 内核、内核模式驱动程序和系统服务以及用户模式应用程序和驱动程序进行调试。

WinDbg 使用 Visual Studio 调试符号格式进行源级调试。 它可以访问拥有 PDB 符号文件的模块中的任何符号或变量,也可以访问使用 COFF 符号文件(如 Windows .dbg 文件)编译的模块所公开的任何公共函数名。

WinDbg 可以查看源代码、设置断点、查看变量(包括 C++ 对象)、堆栈跟踪和内存。 其调试器命令窗口允许用户发出各种命令。

对于内核模式调试,WinDbg 通常需要两台计算机(主计算机和目标计算机)。 WinDbg 还支持针对用户模式和内核模式目标的各种远程调试选项。

WinDbg 是 CDB/NTSD 和 KD/NTKD 的对应图形界面。

KD

Microsoft 内核调试器 (KD) 是基于字符的控制台程序,可对所有基于 NT 的操作系统的内核模式活动进行深入分析。 可以使用 KD 调试内核模式组件和驱动程序,或监视操作系统本身的行为。 KD 还支持多处理器调试。

通常,KD 不会在正在调试的计算机上运行。 内核模式调试需要两台计算机(主计算机目标计算机)。

NTKD

KD 调试器有一个名为 NTKD 的变体。 它和 KD 在各方面都完全相同,只是它在启动时会生成一个新的文本窗口,而 KD 则继承了调用时的命令提示符窗口。

CDB

Microsoft 控制台调试器 (CDB) 是一种基于字符的控制台程序,可对 Windows 用户模式内存和构造进行低级别分析。 名称控制台调试器用于表示 CDB 被归类为控制台应用程序;但并不意味着目标应用程序必须是控制台应用程序。 事实上,CDB 完全能够调试控制台应用程序和图形 Windows 程序。

CDB 的功能非常强大,可用于调试正在运行或最近崩溃的程序(实时分析),而且设置简单。 它可用于调查正常工作的应用程序的行为。 在应用程序失败的情况下,CDB 可用于获取堆栈跟踪或查看有罪参数。 由于它是基于字符的,因此在网络上(使用远程访问服务器)运行良好。

借助 CDB,可以显示和执行程序代码、设置断点,以及检查和更改内存中的值。 CDB 可以通过反汇编二进制代码并显示汇编指令来分析二进制代码。 它还可以直接分析源代码。

由于 CDB 可以通过地址或全局符号访问内存位置,因此可以通过名称而不是地址来引用数据和说明,以便轻松查找和调试代码的特定部分。 CDB 支持调试多个线程和进程。 它是可扩展的,可以读取和写入分页和非分页内存。

如果目标应用程序本身是控制台应用程序,则目标将与 CDB 共享控制台窗口。 要为目标控制台应用程序生成单独的控制台窗口,请使用 -2 命令行选项。

NTSD

CDB 调试器有一个名为 Microsoft NT 符号调试器 (NTSD) 的变体。 它和 CDB 在各方面都完全相同,只是它在启动时会生成一个新的文本窗口,而 CDB 则继承了调用时的命令提示符窗口。

由于 start 命令还可用于生成新的控制台窗口,因此以下两个构造将给出相同的结果:

start cdb parameters
ntsd parameters

可以重定向 NTSD(或 CDB)的输入和输出,以便可以从内核调试器(Visual Studio、WinDbg 或 KD)对其进行控制。 如果此方法与 NTSD 一起使用,则不会显示任何控制台窗口。 因此,从内核调试器控制 NTSD 特别有用,因为它可以产生一个极其轻量级的调试器,几乎不会给包含目标程序的计算机带来任何负担。 此组合可用于调试系统进程、关闭和启动的后续阶段。 有关详细信息,请参阅从内核调试器控制用户模式调试器

另请参阅

Windows 调试

WinDbg 功能