代码之家  ›  专栏  ›  技术社区  ›  Morinar

需要使用windbg调试小型转储的帮助

  •  1
  • Morinar  · 技术社区  · 16 年前

    我读过很多类似的问题,但我似乎找不到确切的答案来回答我的问题是什么。

    我从一个运行在64位Windows2008上的32位应用程序获得了一组小型转储。我的32位Vista业务上的32位Visual Studio根本不会碰它们,所以我一直试图在windbg中打开它们。

    我没有完全对应的.pdb文件(我们只在这个特定的版本之后才开始保存它们),但是我有.pdb由同一台机器用相同的代码构建。我还可以访问创建小型转储的确切可执行文件。

    我发现了一个漂亮的小应用程序,叫做chkmatch,它可以使.pdb与可执行文件匹配…唯一的区别(根据chkmatch)是年龄,所以我将更新的.pdb与原始可执行文件进行了匹配。

    然而,当我把它加载到windbg中时,它仍然说它是一个“不匹配的pdb”,因为我已经设置了 .symopts+0x40 它试图加载它们。然后我得到警告:

    *** WARNING: Unable to verify checksum for myexe.exe
    

    我跑 !lmi myexe 并且发现,实际上,可执行文件的校验和为零。通过一点点的搜索,我发现可执行文件应该是用 /release 具有校验和的标志。这一切都很好,但我不能准确地回到时间和重建(如果我这样做,我肯定会保存原来的.pdbs:-p)。

    我能在这里做些什么吗?似乎有点可笑,我不能让这里的东西匹配至少得到一个调用堆栈。

    2 回复  |  直到 16 年前
        1
  •  1
  •   deemok    16 年前

    您不需要校验和来获取调用堆栈-可以安全地忽略此警告。

    要获取堆栈,需要发出stack命令(k的任何变体)。

    如果小型转储有任何好处(即描述实际故障),您应该首先尝试自动分析 !analyze -v 这会让你开始。

    当你用尽你的专长后回来:o)

        2
  •  0
  •   snoone    16 年前

    如果使用小型转储,则必须设置图像路径(ctrl+i)以指向转储中包含图像的位置。小型转储的问题在于,它们不包含目标上可执行文件的任何代码或数据,因此您必须自己提供它们。

    -史葛

    推荐文章