Debugging Tools for Windows

使用调试器扩展命令

使用调试器扩展命令和使用调试器命令非常类似。在调试器命令窗口中输入命令,会在该窗口中产生输出或改变目标程序或目标机。

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

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

![module.]extension [arguments]

module 名字不能包含.dll扩展名。如果module 包含完整路径,默认的字符串尺寸限制为255。

如果模块还没有被加载,调试器会使用LoadLibrary(module)调用来加载它。调试器加载了扩展库之后,会调用GetProcAddress 函数来定位扩展模块中的命令名。扩展命令名是大小写敏感的,并且必须和出现在扩展模块的.def 中的名字完全相同。如果找到了命令地址,则会调用该命令。

搜索顺序

如果没有指定模块名,调试器会在已加载的扩展模块中搜索。

默认的搜索顺序如下:

  1. 能在所有操作系统和两种调试模式中使用的扩展模块:dbghelp.dllwinext\ext.dll
  2. 在所有模式下可以使用,但是和特定操作系统相关的扩展模块。在Windows XP和之后版本的Windows中为winxp\exts.dll。Windows 2000种没有对应的模块。
  3. 可以在所有操作系统中使用,但是和调试模式相关的扩展模块。内核模式下为winext\kext.dll。用户模式下为winext\uext.dll
  4. 既和操作系统相关又和调试模式相关的扩展模块。下表列出了这些模块。
    Windows 版本 用户模式 内核模式
    Windows 2000
    (free build)
    w2kfre \ ntsdexts.dll w2kfre \ kdextx86.dll
    Windows 2000
    (checked build)
    w2kchk \ ntsdexts.dll w2kchk \ kdextx86.dll
    Windows XP and later winxp \ ntsdexts.dll winxp \ kdexts.dll

如果某个扩展模块被卸载了,他会被从搜索链中移除。当一个扩展模块被加载,会被添加到搜索顺序的开始位置.setdll (Set Default Extension DLL)命令可以用来将任何模块提升到搜索链的顶端。可以通过重复使用该命令来完全控制搜索链。

.chain (List Debugger Extensions) 命令来以当前搜索顺序显示所有加载的扩展模块列表。

如果执行不在任何已加载扩展模块中的命令,会得到一条Export Not Found 错误信息。

更多信息

关于特定的扩展命令的信息,查看调试器扩展命令参考节。

Build machine: CAPEBUILD