【问题标题】:WinDbg: Version mismatch of dbghelp.dll when trying to attach to a processWinDbg:尝试附加到进程时 dbghelp.dll 的版本不匹配
【发布时间】:2013-03-30 18:10:04
【问题描述】:

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

我也尝试过 WinDbg,但它不再能够附加到进程。我总是收到错误消息“dbghelp.dll 的版本与调试器不匹配”: (“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
  • dbgeng: 6.12.0002.633
  • dbghelp: 6.12.0002.633

我怎样才能让 WinDbg(希望是 DebugDiag)再次工作?

【问题讨论】:

  • 这确实很奇怪。您能否验证调试器进程已加载 dbghelp.dll 的副本(例如在进程资源管理器中),或者调试器文件夹中的 dbghelp.dll 确实是有效的 PE 文件(dumpbin 或依赖于救援)?
  • 我检查了 DLL。 WinDbg 真正从调试工具路径加载 DLL,如屏幕截图所示。 Depends 仅报告它找不到 ieshims.dll 作为依赖项。除此之外,它看起来像一个有效的 DLL。我将 ieshims.dll 从 Internet Explorer 文件夹复制到调试工具文件夹,但这没有帮助。
  • 只是一个疯狂的猜测 - 您是否尝试检查进程资源管理器使用的 dbghelp.dll 版本?它是否有可能使用较新版本的 dbghelp.dll 来创建转储?
  • 嗯。我很确定我当时用 Process Explorer 检查了版本。

标签: windows debugging windbg debugdiag


【解决方案1】:

这是执行此检查的 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 版本块中包含无效数据

【讨论】:

  • 好的,我检查了 dbghelp.dll 是否有不同的 ChkDbghlpVersion 调用:1. dbgeng.dll 的版本似乎很好:g_ApiVersion: 6.12.2.633, g_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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 2020-04-26
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多