【发布时间】: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