调试器引擎简介

本文档介绍如何使用调试器引擎以及如何编写将在 WinDbg、KD、CDB 和 NTSD 中运行的扩展。 在 Microsoft Windows 上执行用户模式或内核模式调试时,可以使用这些调试器扩展。

调试器引擎

调试器引擎提供了一个接口,用于在 Microsoft Windows 上的用户模式和内核模式下检查和操作调试目标。

调试器引擎可以获取目标、设置断点、监视事件、查询符号、读取和写入内存,以及控制目标中的线程和进程。

可以使用调试器引擎编写调试器扩展库和独立应用程序。 此类应用程序是 调试器引擎应用程序。 使用调试器引擎的完整功能的调试器引擎应用程序是 调试器。 例如,WinDbg、CDB、NTSD 和 KD 是调试器;调试器引擎提供其功能的核心。

调试器引擎 API 由头文件 dbgeng.h 中的原型指定。

不完整的文档

这是初步文档,目前不完整。

有关此处尚未记录的调试器和调试器引擎的许多概念,请查看本文档的 调试技术 部分。

若要获取调试器引擎 API 的某些当前未记录的功能,请使用 Execute 方法执行各个调试器命令。

扩展

可以通过编写和生成扩展 DLL 来创建自己的调试命令。 例如,你可能想要编写扩展命令来显示复杂的数据结构。

有三种不同类型的调试器扩展 DLL:

  • DbgEng 扩展 DLL。 它们基于 dbgeng.h 头文件中的原型。 此类型的每个 DLL 都可以导出 DbgEng 扩展命令。 这些扩展命令使用调试器引擎 API,也可能使用 WdbgExts API。

  • EngExtCpp 扩展 DLL。 它们基于 engextcpp.h 和 dbgeng.h 头文件中的原型。 此类型的每个 DLL 都可以导出 DbgEng 扩展命令。 这些扩展命令同时使用调试器引擎 API 和 EngExtCpp 扩展框架,还可以使用 WdbgExts API。

  • WdbgExts 扩展 DLL。 它们基于 wdbgexts.h 头文件中的原型。 此类型的每个 DLL 导出一个或多个 WdbgExts 扩展命令。 这些扩展命令以独占方式使用 WdbgExts API。

DbgEng API 可用于创建扩展或独立应用程序。 WdbgExts API 包含调试器引擎 API 的一部分功能,只能由扩展使用。

应使用生成实用工具编译和生成所有调试器扩展。 生成实用工具包含在 Windows 驱动程序工具包 (WDK) 中。

如果执行自定义安装并选择 SDK 组件及其所有子组件,扩展代码示例将作为 Windows 调试工具包的一部分进行安装。 可以在 Windows 安装目录的调试工具的 sdk\samples 子目录中找到它们。

编写新的调试器扩展的最简单方法是研究示例扩展。 每个示例扩展都包含用于生成实用工具的生成文件和源文件。 这两种类型的扩展都在示例中表示。

编写自定义分析调试器扩展

可以通过编写分析扩展插件来扩展 !analyze 调试器命令的功能。 通过提供分析扩展插件,你可以以特定于你自己的组件或应用程序的方式参与对 bug 检查或异常的分析。 编写分析扩展插件时,还会编写一个元数据文件,用于描述要调用插件的情况。 当 !analyze 运行时,它会查找、加载和运行相应的分析扩展插件。 有关详细信息,请参阅 编写自定义分析调试器扩展

使用 DML 自定义调试器输出

可以使用 DML 自定义调试器输出。 有关详细信息,请参阅 使用 DML 自定义调试器输出

使用 JavaScript 扩展调试器的功能

使用 JavaScript 创建了解调试器对象以及扩展和自定义调试器功能的脚本。 JavaScript 提供程序将脚本语言桥接到调试器的内部对象模型。 JavaScript 调试器脚本提供程序允许 将 JavaScript 与调试器一起使用。 有关详细信息,请参阅 JavaScript 调试器脚本