使用调试器扩展命令

调试器扩展命令的使用与 调试器命令的使用非常相似。 命令在“调试器命令”窗口中键入,在此窗口中生成输出,或者在目标应用程序或目标计算机中生成更改。

实际的调试器扩展命令是由调试器调用的 DLL 中的入口点。

调试器扩展按以下语法调用:

![module.]extension[arguments]

模块名称后跟 .dll 文件扩展名。 如果 模块 包含完整路径,则默认字符串大小限制为 255 个字符。

如果模块尚未加载,将使用调用 LoadLibrary (模块) 将其加载到调试器中。 调试器加载扩展库后,它会调用 GetProcAddress 函数,以在扩展模块中查找扩展名称。 扩展名称区分大小写,必须完全按照扩展模块的 .def 文件中显示的方式输入。 如果找到扩展地址,则调用该扩展。

搜索顺序

如果未指定模块名称,调试器将在加载的扩展模块中搜索此导出。

默认搜索顺序如下:

  1. 适用于所有操作系统和两种模式的扩展模块:Dbghelp.dll 和 winext\ext.dll。

  2. 在所有模式下工作的扩展模块,但特定于操作系统。 对于 Windows XP 和更高版本的 Windows,这是 winxp\exts.dll。

  3. 适用于所有操作系统但特定于模式的扩展模块。 对于内核模式,这是 winext\kext.dll。 对于用户模式,这是 winext\uext.dll。

  4. 特定于操作系统和模式的扩展模块。 下表指定了此模块。

用户模式 内核模式
winxp \ ntsdexts.dll winxp \ kdexts.dll

卸载扩展模块时,将从搜索链中删除该扩展模块。 加载扩展模块时,它会添加到搜索顺序的开头。 .setdll (Set Default Extension DLL) 命令可用于将任何模块提升到搜索链的顶部。 通过重复使用此命令,可以完全控制搜索链。

使用 .chain (列出调试器扩展) 命令可按当前搜索顺序显示所有已加载扩展模块的列表。

如果尝试执行不在加载的任何扩展模块中的扩展命令,将收到“未找到导出”错误消息。