一年多以前,我已经使用WinDbg和DebugDiag来查找我们在Java中使用的JNI本机DLL中的内存泄漏。现在我正在寻找线程句柄泄漏。 我使用Process Explorer创建了一个内存转储,并尝试在DebugDiag中对其进行分析,但我得到的只是脚本错误:
我也尝试过WinDbg,但它无法再附加到进程了。我总是收到错误消息“dbghelp.dll与调试器的版本不匹配”: (“Unbekannter Fehler”表示“未知错误”)
我卸载了DebugDiag和Windows SDK,然后下载了最新版本并安装了Windows SDK 8和DebugDiag 1.2(x86)。问题保持不变。即使用版本7.1(最新的Windows 7 SDK)替换Windows SDK,也没有任何变化。
我正在使用Windows 7(32位)的计算机。
我认为DebugDiag中的问题与WinDbg中的问题具有相同的原因。但我不明白版本不匹配是什么意思(谷歌搜索也没有帮助):
如何让WinDbg(希望DebugDiag)再次运行?
答案 0 :(得分:0)
这是执行此检查的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
),以找出调试器的原因失败。
可能的原因: