WinDbg:尝试附加到进程时 dbghelp.dll 版本不匹配

2023-11-29

Over a year ago I already used WinDbg and DebugDiag to find a memory leak in a JNI native DLL that we use from within Java. Now I am searching for a thread handle leak. I created a memory dump using Process Explorer and tried to analyze it in DebugDiag, but all I get are script errors: Memory dump analysis fails with script errors

I also tried WinDbg, but it is not able to attach to a process anymore. I always get the error message "dbghelp.dll has a version mismatch with the debugger": WinDbg 6.12.0002.633 X86 fails with "Could not attach to process xxx 0x80004005" ("Unbekannter Fehler" means "Unknown error")

我卸载了 DebugDiag 和 Windows SDK,然后下载了最新版本并安装了 Windows SDK 8 和 DebugDiag 1.2 (x86)。问题仍然一样。即使将 Windows SDK 替换为版本 7.1(适用于 Windows 7 的最新 SDK),也没有任何变化。

我使用的是 Windows 7(32 位)的机器。

我认为 DebugDiag 中的问题与 WinDbg 中的问题具有相同的原因。但我不明白版本不匹配是什么意思(谷歌搜索也没有帮助):

  • WinDbg:6.12.0002.633
  • 数据库生成:6.12.0002.633
  • dbg帮助:6.12.0002.633

我怎样才能让WinDbg(希望还有DebugDiag)再次工作?


这是执行此检查的 dbgeng 部分的伪代码:

var (
    g_ApiVersion = API_VERSION{1, 0, 12, 0}
    g_DbghelpVersion API_VERSION
    g_EngOptions = Options{...}
)

func ChkDbghlpVersion() uint32 {
    g_DbghlpVersion = dbghelp.ImagehlpVersionEx(g_ApiVersion)
    if g_DbghelpVersion.Revision < g_ApiVersion.Revision {
        DebugOutput("dbghelp.dll has version mismatch with the debugger")
        if !(g_EngOptions.SomeOpt & 1) {
            return E_UNKNOWN
        }
    }
    return S_OK
}

所以,你应该检查什么dbghelp.dll从调试文件夹返回ImagehlpApiVersionEx(可能还有什么dbgeng.dll其内有g_ApiVersion)找出调试器失败的原因。

可能的原因:

  • dbghelp.dll确实有备用构建信息。
  • dbgeng.dll 已损坏(?)并且其 api 版本块中包含无效数据
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WinDbg:尝试附加到进程时 dbghelp.dll 版本不匹配 的相关文章

随机推荐