Windows WinDbg:尝试附加到进程时dbghelp.dll的版本不匹配
一年多前,我已经使用WinDbg和DebugDiag在Java中使用的JNI本机DLL中查找内存泄漏。现在我正在寻找一个线程句柄泄漏。 我使用Process Explorer创建了一个内存转储,并尝试在DebugDiag中对其进行分析,但得到的只是脚本错误: 我也尝试了WinDbg,但它无法再连接到进程。我总是收到错误消息“dbghelp.dll与调试器的版本不匹配”: (“Unbekanner Fehler”表示“未知错误”) 我卸载了DebugDiag和Windows SDK,然后下载了最新版本并安装了Windows SDK 8和DebugDiag 1.2(x86)。问题依然存在。即使将Windows SDK替换为7.1版(适用于Windows 7的最新SDK),也没有任何变化 我正在使用一台带有Windows7(32位)的机器 我假设DebugDiag中的问题与WinDbg中的问题具有相同的原因。但我不明白版本不匹配是什么意思(谷歌搜索也没有帮助):Windows WinDbg:尝试附加到进程时dbghelp.dll的版本不匹配,windows,debugging,windbg,debugdiag,Windows,Debugging,Windbg,Debugdiag,一年多前,我已经使用WinDbg和DebugDiag在Java中使用的JNI本机DLL中查找内存泄漏。现在我正在寻找一个线程句柄泄漏。 我使用Process Explorer创建了一个内存转储,并尝试在DebugDiag中对其进行分析,但得到的只是脚本错误: 我也尝试了WinDbg,但它无法再连接到进程。我总是收到错误消息“dbghelp.dll与调试器的版本不匹配”: (“Unbekanner Fehler”表示“未知错误”) 我卸载了DebugDiag和Windows SDK,然后下载了最
- 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
}
var(
g_ApiVersion=API_版本{1,0,12,0}
g_DbghelpVersion API_版本
g_EngOptions=选项{…}
)
func ChkDbghlpVersion()uint32{
g_DbghlpVersion=dbghelp.ImagehlpVersionEx(g_ApiVersion)
如果g_DbghelpVersion.Revision
因此,您应该检查调试文件夹中的dbghelp.dll
从ImagehlpApiVersionEx
返回的内容(以及dbgeng.dll
在其g\u ApiVersion
中可能包含的内容),以找出调试器失败的原因
可能的原因:
- dbghelp.dll确实有另一个生成信息
- dbgeng.dll已损坏(?),其api版本块中包含无效数据
g\u ApiVersion:6.12.2.633,g\u DbghlpVersion:6.12.2.633
。2.windows32目录中的dbghelp.dll版本给出了以下信息:g_ApiVersion:6.1.7601.17514,g_DbghlpVersion:6.1.5.0
。3.与您的示例相同:g_ApiVersion:1.0.12.0,g_DbghlpVersion:6.1.5.0