2013-04-08 47 views
2

一年前,我已經使用WinDbg和DebugDiag在我們從Java內部使用的JNI本機DLL中查找內存泄漏。現在我正在尋找線程處理泄漏。 我創建使用Process Explorer的內存轉儲,並試圖分析它在DebugDiag資料,但我得到的腳本錯誤: Memory dump analysis fails with script errorsWinDbg:嘗試附加到進程時dbghelp.dll的版本不匹配

我也試過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)。問題保持不變。即使在使用V7.1(最新的Windows 7 SDK)替換Windows SDK之後,也沒有任何變化。

我正在使用Windows 7(32位)的機器。

我認爲DebugDiag中的問題與WinDbg中的問題具有相同的原因。但我不明白的是什麼意思版本不匹配(和谷歌搜索沒有幫助):

  • 的WinDbg:6.12.0002.633
  • dbgeng:6.12.0002.633
  • DBGHELP:6.12.0002.633

如何讓WinDbg(並希望DebugDiag)再次工作?

+0

這確實是奇怪的無效數據。你能否驗證調試器進程已經加載了dbghelp.dll的副本(例如在進程管理器中),或者調試器文件夾中的dbghelp.dll確實是一個有效的PE文件(dumpbin或取決於救援)? – deemok 2013-04-09 17:28:10

+0

我檢查了DLL。 WinDbg真正從調試工具路徑加載DLL,如截圖所示。僅依賴於無法找到ieshims.dll作爲依賴項的報告。除此之外,它看起來像一個有效的DLL。我將Internet Explorer文件夾中的ieshims.dll複製到調試工具文件夾,但沒有任何幫助。 – 2013-04-10 09:27:35

+0

只是一個瘋狂的猜測 - 你是否嘗試檢查進程explorrer使用的dbghelp.dll的版本?是否有可能使用較新版本的dbghelp.dll來創建轉儲? – Jan 2014-08-01 19:54:34

回答

0

這是執行此檢查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版本塊
+0

好的,我檢查了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' – 2013-04-25 18:31:51