Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows WinDbg:尝试附加到进程时dbghelp.dll的版本不匹配_Windows_Debugging_Windbg_Debugdiag - Fatal编程技术网

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

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和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中的问题具有相同的原因。但我不明白版本不匹配是什么意思(谷歌搜索也没有帮助):

  • 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版本块中包含无效数据

这确实很奇怪。您能否验证调试器进程已加载dbghelp.dll的副本(例如,在process explorer中)或调试器文件夹中的dbghelp.dll是否确实是有效的PE文件(dumpbin或取决于解救)?我检查了dll。WinDbg确实从调试工具路径加载DLL,如屏幕截图所示。Dependes仅报告它无法找到ieshims.dll作为依赖项。此外,它看起来像一个有效的DLL。我将ieshims.dll从Internet Explorer文件夹复制到调试工具文件夹中,但没有任何帮助。只是胡乱猜测-您是否尝试检查process Explorer使用的dbghelp.dll版本?有没有可能是它使用了更新版本的dbghelp.dll来创建转储?嗯。我很确定当时我用Process Explorer检查了版本。好的,我检查了dbghelp.dll以获得ChkDbghlpVersion:1的不同调用。dbgeng.dll的版本似乎很好:
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