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

一年前,我已经使用WinDbg和DebugDiag来查找JNI本地DLL中的内存泄漏,我们在Java中使用它。 现在我正在寻找一个线程处理泄漏。 我使用Process Explorer创build了一个内存转储,并试图在DebugDiag中进行分析,但是我得到的只是脚本错误: 内存转储分析失败,脚本错误

我也尝试过WinDbg,但是它不能够附加到一个进程了。 我总是得到错误消息“dbghelp.dll与debugging器版本不匹配”: WinDbg 6.12.0002.633 X86失败,“无法连接到进程xxx 0x80004005” (“Unbekannter Fehler”的意思是“未知错误”)

我卸载了DebugDiag和Windows SDK,然后下载了最新的版本,并安装了Windows SDK 8和DebugDiag 1.2(x86)。 问题保持不变。 即使使用V7.1(最新的Windows 7 SDK)replaceWindows SDK之后,也没有任何变化。

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

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

  • WinDbg:6.12.0002.633
  • dbgeng:6.12.0002.633
  • dbghelp: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 (可能是g_ApiVersion在其g_ApiVersion有什么)返回,以查明调试器失败的原因。

可能的原因:

  • dbghelp.dll确实有一个替代版本信息。
  • dbgeng.dll损坏(?)并且在其api版本块中包含无效数据