调试器编程扩展 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 是一种内核调试传输,支持通过网络对窗口进行内核调试。 它经过设计,使硬件支持层内置于网络数据包处理和内核接口层的单独模块中。 此硬件驱动程序支持层称为 KDNET 扩展性模块。 有关详细信息,请参阅 开发 KDNET 传输扩展性模块