【问题标题】:WinDbg doesn't load symbol file that is created using the same source but built at a differnt time than the originalWinDbg 不会加载使用相同源创建但构建时间与原始文件不同的符号文件
【发布时间】:2010-12-13 03:50:12
【问题描述】:

我们发布了一个产品(C#.NET库),并没有存储库的pdb文件,假设我们总是可以使用相同的源代码生成符号文件。

现在,我们要分析正在使用我们库的应用程序的故障转储(小型转储)文件。 由于我们没有存储 pdb 文件,因此我使用相同的源代码(在 SVN 中使用相同的标记)创建了一个新文件。然后我尝试了WinDbg并提供了pdb文件,但调试器不喜欢它。

由于源代码相同,我认为唯一的区别是构建完成的日期(我们使用同一台机器进行发布)。这真的会导致调试器不加载符号文件吗? WinDbg如何识别符号文件?

如果我确定符号文件与原始文件相同(日期除外),有没有办法强制 WinDbg 加载符号文件?

谢谢。

注意:如果我发布新版本并人为创建转储文件,则符号会正确加载。

【问题讨论】:

    标签: c# windbg symbols


    【解决方案1】:

    在不更改源的情况下进行重建将更改 pdb 文件。有关血腥细节,请参阅 John Robbins 的博客条目 PDB FILES: WHAT EVERY DEVELOPER MUST KNOW

    您需要告诉 WinDbg 对其准备加载的符号文件不那么挑剔。来自(稍老的)WinDbg 帮助文件:

    SYMOPT_LOAD_ANYTHING
    

    此符号选项可减少符号处理程序在尝试匹配符号时的挑剔性。

    此选项默认关闭。调试器运行后,可以分别使用 .symopt+0x40 或 .symopt-0x40 将其打开或关闭。

    【讨论】:

    • .symopt+0x40 解决了我们的问题 :) 此外,该博客条目非常有用。谢谢
    【解决方案2】:

    “这真的会导致调试器无法加载符号文件吗?”...

    是的:每次构建二进制文件 + pdb 时,它们都会获得一个新的 GUID。因此,除了转储文件和新 PDB 文件之间的时间戳差异之外,GUID 将关闭。

    【讨论】:

      猜你喜欢
      • 2020-12-20
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      相关资源
      最近更新 更多