【问题标题】:Is it possible to load mismatched symbols in Visual Studio?是否可以在 Visual Studio 中加载不匹配的符号?
【发布时间】:2011-04-09 06:33:56
【问题描述】:

我有一个 Windows minidump(C 代码)和一个相应的 exe 文件。不幸的是,我没有完全匹配的 .pdb 文件,但我确实有 .pdbs 包含在不同时间构建的完全相同的代码。在 Windbg 中,我可以使用:

.symopt+0x40

告诉它加载任何东西,甚至是不匹配的符号文件。这在这种特殊情况下效果很好,并且我能够获得正确的调用堆栈。我只是好奇 Visual Studio 是否有任何这样的功能。我们在这里使用了几乎所有不同版本的 VS,所以它可能在哪个版本中并不重要。谢谢。

【问题讨论】:

  • 这并不能真正回答您的问题,但您可以通过标准化一组一致的开发工具来帮自己一个大忙。
  • 我们有一个一致的集合。只是我们支持旧版本的软件,不值得冒险将旧版本的软件移植到新版本的 Visual Studio。

标签: c visual-studio debugging minidump


【解决方案1】:

试试this utility:

ChkMatch 实用程序可用于检查可执行文件和调试信息文件是否匹配。如果它们兼容,它还可以用于强制执行可执行文件和调试信息文件之间的匹配。

有关调试信息匹配和相关问题的更多信息,请参阅此article

支持的调试信息格式:DBG、PDB 2.0、PDB 7.0...

【讨论】:

  • 我同意,这就是解决方案。
  • 整个命令看起来像 chkmatch -m C:\Temp\myLib.dll C:\Temp\myLib.pdb
  • 此答案中的所有链接都已失效
【解决方案2】:

没有覆盖,但this question 的发帖人找到了一种修改 PDB 文件以使其与 EXE 匹配的方法。

感谢其中一位 cmets 第一个答案,我检查了一个链接 “无证”一书的pdf Windows 2000 的秘密:程序员 食谱”。作者进入 关于 pdb 文件的详细信息 格式。正如我之前所说,我有 已经将 pdb 加载到十六进制 编辑并翻转了一些位 看来我做了 年龄/签名匹配,但它没有 工作。好吧,使用该实用程序后 从 W2k 秘籍书到“爆炸” 将 pdb 放入包含的流中,我 发现他们隐藏了另一个 参考流中的年龄 3!!!!!!!一旦我把那个翻转为 嗯,它在windbg中匹配。

不确定你是否想这么麻烦,但看起来可以做到。如果这是为了生产支持,那么值得您花时间。

【讨论】:

  • 我最终解决了这个问题,但想接受一个答案,因为我不希望我的回答率低于 100% ;-) 这个似乎有最有用的信息,所以我接受了。
【解决方案3】:

Visual Studio 和 Windbg 通过将 Executable 标头中的时间戳与存储在 pdb 文件中的时间戳进行比较来匹配 pdb。您可以通过运行 dumpin /headers 查看时间戳。

我没有使用 chkmatch,但是修改 exe 或 pdb 以相互匹配应该可以正常工作。

请注意,这种技术可能不足以调试您的二进制文件。 John Robbins 在他的书“调试 Windows”(我可以推荐)中提到,他从几乎相同的时间构建的相同源代码树中看到了不同的构建结果。

始终使用您的构建(包括发布构建)构建 pdb 符号,并将它们与构建产品一起存档,并包含 .map 文件以更好地衡量。

【讨论】:

    【解决方案4】:

    根据this post,在Visual Studio 中也可以使用sos windbg 命令。但我不确定“.symopt”是否也属于这一类。

    【讨论】:

      【解决方案5】:

      有人告诉我,在 VS2019(16.7 .. 16.8 球场)中,他们切换到了多线程 PDB 文件生成器以加快速度。

      副作用是在不同线程上生成的文件部分可能以不同的顺序在文件中结束。

      归根结底,使用由 EXE 构建的 PDB 比以前更重要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-28
        • 2011-03-29
        • 1970-01-01
        相关资源
        最近更新 更多