调试器编程扩展 API

本节包括:

调试器引擎概述

使用调试器引擎 API

编写 DbgEng 扩展

EngExtCpp 扩展

编写 WdbgExts 扩展

使用 DML 自定义调试器输出

使用 JavaScript 扩展调试器的功能

开发 KDNET 传输扩展性模块

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

调试器引擎

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

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

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

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

有关详细信息,请参阅 调试器引擎概述 和使用 调试器引擎 API

扩展

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

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

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

    有关详细信息,请参阅 编写 DbgEng 扩展

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

  • WdbgExts 扩展 DLL。 这些基于 wdbgexts.h 头文件中的原型。 此类型的每个 DLL 导出一个或多个 WdbgExts 扩展命令。 这些扩展命令以独占方式使用 WdbgExts API。 有关详细信息,请参阅 编写 WdbgExts 扩展

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

应使用 Visual Studio 编译和生成所有调试器扩展。

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

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

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

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

使用 DML 自定义调试器输出

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

使用 JavaScript 扩展调试器的功能

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

开发 KDNET 传输扩展性模块

通过使用单独的硬件驱动程序扩展性模块 dll,KDNET 传输可以扩展为在任何硬件上运行。 KDNET 传输扩展性模块由网络卡供应商开发,以向特定网卡添加内核调试支持。

KDNET 是一种内核调试传输,支持通过网络对 Windows 进行内核调试。 它旨在将硬件支持层内置到独立于网络数据包处理和内核接口层的模块中。 此硬件驱动程序支持层称为 KDNET 扩展性模块。 有关详细信息,请参阅 开发 KDNET 传输扩展性模块