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:
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":
("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(使用前将#替换为@)