使用调试器扩展命令
调试器扩展命令的使用与 调试器命令的使用非常相似。 命令在“调试器命令”窗口中键入,在此窗口中生成输出,或者在目标应用程序或目标计算机中生成更改。
实际的调试器扩展命令是由调试器调用的 DLL 中的入口点。
调试器扩展按以下语法调用:
![module.]extension[arguments]
模块名称后跟 .dll 文件扩展名。 如果 模块 包含完整路径,则默认字符串大小限制为 255 个字符。
如果模块尚未加载,将使用调用 LoadLibrary (模块) 将其加载到调试器中。 调试器加载扩展库后,它会调用 GetProcAddress 函数,以在扩展模块中查找扩展名称。 扩展名称区分大小写,必须完全按照扩展模块的 .def 文件中显示的方式输入。 如果找到扩展地址,则调用该扩展。
搜索顺序
如果未指定模块名称,调试器将在加载的扩展模块中搜索此导出。
默认搜索顺序如下:
适用于所有操作系统和两种模式的扩展模块:Dbghelp.dll 和 winext\ext.dll。
在所有模式下工作的扩展模块,但特定于操作系统。 对于 Windows XP 和更高版本的 Windows,这是 winxp\exts.dll。
适用于所有操作系统但特定于模式的扩展模块。 对于内核模式,这是 winext\kext.dll。 对于用户模式,这是 winext\uext.dll。
特定于操作系统和模式的扩展模块。 下表指定了此模块。
用户模式 | 内核模式 |
---|---|
winxp \ ntsdexts.dll | winxp \ kdexts.dll |
卸载扩展模块时,将从搜索链中删除该扩展模块。 加载扩展模块时,它会添加到搜索顺序的开头。 .setdll (Set Default Extension DLL) 命令可用于将任何模块提升到搜索链的顶部。 通过重复使用此命令,可以完全控制搜索链。
使用 .chain (列出调试器扩展) 命令可按当前搜索顺序显示所有已加载扩展模块的列表。
如果尝试执行不在加载的任何扩展模块中的扩展命令,将收到“未找到导出”错误消息。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈