gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:47:42 43 4
gpt4 key购买 nike

一年多以前,我已经使用 WinDbg 和 DebugDiag 来查找我们在 Java 中使用的 JNI native DLL 中的内存泄漏。现在我正在寻找线程句柄泄漏。我使用 Process Explorer 创建了一个内存转储,并尝试在 DebugDiag 中对其进行分析,但我得到的只是脚本错误: Memory dump analysis fails with script errors

我也尝试过 WinDbg,但它无法再附加到进程。我总是收到错误消息“dbghelp.dll 的版本与调试器不匹配”: WinDbg 6.12.0002.633 X86 fails with "Could not attach to process xxx 0x80004005"(“Unbekannter Fehler”的意思是“未知错误”)

我卸载了 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
  • 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.dllImagehlpApiVersionEx 返回的内容(可能还有 dbgeng.dll 在其g_ApiVersion) 找出调试器失败的原因。

可能的原因:

  • dbghelp.dll 确实有备用构建信息。
  • dbgeng.dll 已损坏 (?) 并在其 api 版本 block 中包含无效数据

关于windows - WinDbg:尝试附加到进程时 dbghelp.dll 的版本不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15882862/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com