添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

DbgEng 扩展 DLL 导出许多回调函数,其中一些函数可能是扩展命令的实现。

这些扩展 DLL 由调试器引擎加载 ,可以在 Microsoft Windows 上执行用户模式或内核模式调试时提供额外的功能或任务自动化。

如果已针对 Windows 执行调试工具的完整安装,可在安装目录的 sdk\samples\exts 子目录中找到名为"exts"的示例 DbgEng 扩展。

扩展 DLL 可以导出用于执行扩展命令的任意数目的函数。 每个函数在 .def 文件中显式声明为导出,其名称必须完全由小写字母组成。

用于实现扩展命令的函数必须与 原型PDEBUG_EXTENSION_CALL。

这些函数根据标准 C++ 约定命名,但不允许使用大写字母。 导出的函数名称和扩展命令名称是相同的,只不过扩展命令以感叹号 (!) 。 例如,将myextension.dll加载到调试器中,然后在调试器 命令窗口 中键入 !stack 时,调试器在调试器中查找名为 stack 的导出myextension.dll。

如果myextension.dll,或者在其他扩展 DLL 中可能有同名的其他扩展命令,可以在调试器 命令窗口 中键入 !myextension.stack 以指示该 DLL 中的扩展 DLL 和扩展命令。

其他导出的函数

DbgEng 扩展 DLL 必须导出 DebugExtensionInitialize 。 加载 DLL 时将调用此 ,以初始化 DLL。 DLL 可能会使用它来初始化全局变量。

扩展 DLL 可以导出 DebugExtensionUninitialize 。 如果导出此 ,将在卸载扩展 DLL 之前调用它。 DLL 可能会使用它在卸载之前进行清理。

扩展 DLL 可以导出 DebugExtensionNotify 。 如果导出此 ,则当会话开始或结束时,以及目标开始或停止执行时,将调用它。 这些通知还会提供给向客户端 注册的 IDebugEventCallbacks 对象。

扩展 DLL 可以导出 KnownStructOutput 。 如果导出此 ,则加载 DLL 时将调用它。 此函数返回 DLL 知道如何在单行上打印的结构列表。 稍后可以调用它来格式化这些结构的实例以用于打印。

加载 DbgEng 扩展 DLL 的引擎过程

加载扩展 DLL 时,由引擎按以下顺序调用回调函数:

  • 调用 DebugExtensionInitialize ,以便扩展 DLL 可以初始化。

  • 如果导出,则如果引擎具有活动会话,则调用 DebugExtensionNotify;如果会话已挂起且可访问,则再次调用 DebugExtensionNotify

  • 如果导出, 则调用 KnownStructOutput 以请求 DLL 知道如何在单行上打印的结构列表。

    有关 如何使用调试器加载 和卸载扩展 DLL 的信息,请参阅加载调试器扩展 DLL;有关执行扩展命令的信息,请参阅使用 调试器扩展 命令。

    调试器引擎将围绕对扩展 DLL 的调用放置 try /except 块。 这可保护引擎免受扩展代码中某些类型的 bug 影响;但是,由于扩展调用与引擎在同一线程中执行,因此它们仍可能导致它崩溃。

  •