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

2023-11-29

Over a year ago I already used WinDbg and DebugDiag to find a memory leak in a JNI native DLL that we use from within Java. Now I am searching for a thread handle leak. I created a memory dump using Process Explorer and tried to analyze it in DebugDiag, but all I get are script errors: Memory dump analysis fails with script errors

I also tried WinDbg, but it is not able to attach to a process anymore. I always get the error message "dbghelp.dll has a version mismatch with the debugger": WinDbg 6.12.0002.633 X86 fails with "Could not attach to process xxx 0x80004005" ("Unbekannter Fehler" means "Unknown error")

我卸载了 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
  • dbg帮助: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.dll从调试文件夹返回ImagehlpApiVersionEx(可能还有什么dbgeng.dll其内有g_ApiVersion)找出调试器失败的原因。

可能的原因:

  • dbghelp.dll确实有备用构建信息。
  • dbgeng.dll 已损坏(?)并且其 api 版本块中包含无效数据
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WinDbg:尝试附加到进程时 dbghelp.dll 版本不匹配 的相关文章

  • SetCursor 在鼠标移动后恢复

    我正在使用 SetCursor 将系统光标设置为我自己的图像 代码看起来像这样 member on some class HCURSOR cursor at init time cursor LoadCursorFromFile somef
  • 如何使 Visual Studio 仅在未处理的异常时中断?

    在我的其他机器上 当没有 try catch 来处理错误时 Visual Studio 总是会因错误而中断 但如果有 try catch 则它不会中断 由于某种原因 在这台笔记本电脑上 它不能以这种方式工作 一开始它根本没有中断 但后来我发
  • Inno Setup中如何处理带空格的路径?

    我想允许带有空格的路径 例如program files 当使用 Inno Setup 安装我的程序时 但是 带有空格的路径会让我安装的服务崩溃 Inno 安装文件如下所示 Setup AppName Demo DefaultDirName
  • 如何使用WAMP登录phpMyAdmin,用户名和密码是什么?

    根 这个词是什么意思php我的管理员 http en wikipedia org wiki PhpMyAdmin 每当我写作时localhost phpmyadmin在地址栏上 我被要求输入用户名和密码 但我不知道它们是什么 我不记得何时何
  • 有没有办法在调试 JavaScript 时更改变量值?

    我在这段代码上有一个断点 使用 Firebug if validator formValidate dom forumid 我怎样才能跳过这个验证部分并进入if条款即使我的dom forumid无效 即调用formValidate 回报fa
  • Java认为我的主文件夹是C盘?

    由于某种原因 我必须更改某些配置或其他内容 因为在一个全新的项目中 我输入以下内容 System out println System getProperty user home 并得到以下输出 C 而以前 它常常返回类似的东西C User
  • 从 Windows Batch (cmd.exe) 中的文件读取环境变量

    我正在尝试从批处理文件中读取变量 以便稍后在批处理脚本 Java 启动器 中使用 理想情况下 我希望所有平台 Unix Windows 上的设置文件都具有相同的格式 并且也是有效的 Java 属性文件 也就是说 它应该看起来像这样 sett
  • 为什么不鼓励在 Windows 上将 PPM perl 模块与 Strawberry perl 一起使用?

    任何人都可以解释为什么人们会发表此评论吗 我在 stackoverflow 上看到了几个线程 像这个 https stackoverflow com questions 6643939 installing modules using st
  • 在 Mono 上使用 Mono for android

    将 MonoDevelop 的编译器切换为 Mono 工具而不是 NET 看起来非常容易 您只需在 IDE 的设置下选择不同的框架即可 然而 在切换到 Mono 并使用 Mono 工具编译项目后 Mono for android 似乎不再是
  • 如何在 Windows 中的命令提示符启动时运行命令

    EDIT 如果您想在计算机启动时执行任何任务或基于 活动这非常有帮助 http answers microsoft com en us windows forum windows 7 performance how to schedule
  • 如何获取在记事本中打开的文件的文件名和路径?

    是否可以获取在记事本中打开的文件的名称和路径 我已经有了 Notepad exe 的 ProcessId 谢谢 纳夫尼特 它是标题栏的一部分 所以需要获取窗口句柄 然后调用Win API函数GetWindowText 这可能就是您想要的 使
  • 将 SQL 数据库附加到 ComboBox.ItemSsource (WPF)

    我想知道如何将 SQL Server 数据库分配给 ComboBox 的 ItemSource 属性 在 WPF 应用程序中 我将数据源分配给项目 但不知道如何分配给属性 此致 你可以这样尝试 你可以像下面这样绑定组合框的项目源属性 Ite
  • 如何从 Java 生产代码中删除调试语句

    编译器是否可以从生产代码中删除用于调试目的 例如日志记录 的语句 调试语句需要以某种方式进行标记 可能使用注释 设置属性 debug true 并在每个调试语句中检查它很容易 但这会降低性能 如果编译器能够简单地使调试语句消失 那就太好了
  • 如何从 Windows 批处理文件中的 ECHO 字符串中去除引号?

    我正在创建一个 Windows 批处理文件 但我必须 ECHO 一个大型复杂字符串 因此我必须在两端加上双引号 问题是引号也被回显到我正在写入的文件中 如何 ECHO 这样的字符串并去掉引号 UPDATE 我花了两天的时间研究这个问题 终于
  • .NET 进程分配的内存何时释放回 Windows

    设置 NET 在启动时以及在收集后尝试满足分配请求时 分段为每一代的堆 0 1 2 LOH 分配内存 以获得连续的内存块 为每个堆分配的内存可能会随着应用程序 预热 而趋于平稳 但第 2 代和大型对象堆可能除外 在垃圾收集期间 每个堆 0
  • 为什么将多线程应用程序限制在一个核心上会使其运行速度更快?

    我有一个本机多线程Win32用 C 编写的应用程序 大约有 3 个相对繁忙的线程和 4 到 6 个不执行太多操作的线程 当它在正常模式下运行时 在 8 核计算机上 总 CPU 使用率总计约为 15 并且应用程序在大约 30 秒内完成 当我通
  • C++ Windows - 如何从 PID 获取进程路径

    如何在 Windows 上使用 C 从进程的 PID 检索进程的完全限定路径 Call OpenProcess http msdn microsoft com en us library ms684320 28VS 85 29 aspx获取
  • 设置透明背景Win32

    我想做的事情非常简单 但似乎没有太多信息 基本上我有一个普通的不透明父窗口 我想在该父窗口内放置一个子窗口 有自己的不透明控件 所以我唯一要做的就是将子窗口的背景画笔设置为透明 但它仍然绘制白色背景 尝试使用 WS EX LAYERED 样
  • phpstorm 和 xdebug 之间的连接

    我配置了 phpstorm xdebug 并且能够使用断点调试我的代码 这些天我更新了 php 通过brew 和 xdebug 现在我有 php 5 5 26 和 xdebug 2 3 3 当我尝试调试测试 和代码 时 phpstorm 告
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st

随机推荐