我们发布了一个产品(C#.NET库)并且没有存储库的pdb文件,假设我们总是可以使用相同的源代码生成符号文件。
现在,我们要分析正在使用我们的库的应用程序的崩溃转储(迷你转储)文件。 由于我们没有存储pdb文件,因此我创建了一个使用相同源代码的新文件(在SVN中使用相同的标记)。然后我尝试了WinDbg并提供了pdb文件,但是调试器不喜欢它。
由于源代码是相同的,我认为唯一的区别是构建完成的日期(我们使用相同的机器发布)。这真的会导致调试器无法加载符号文件吗? WinDbg如何识别符号文件?
如果我确定符号文件与原始符号文件相同(日期除外),是否有办法强制WinDbg加载符号文件?
感谢。
注意:如果我制作新版本并人为创建转储文件,则会正确加载符号。
答案 0 :(得分:6)
在不更改源的情况下重建将更改pdb文件。有关血腥的详细信息,请参阅John Robbins的博客文章PDB FILES: WHAT EVERY DEVELOPER MUST KNOW。
你需要告诉WinDbg对它准备加载的符号文件不那么挑剔。来自(稍微老一点的)WinDbg帮助文件:
SYMOPT_LOAD_ANYTHING
此符号选项可在尝试匹配符号时减少符号处理程序的挑剔。
默认情况下,此选项处于关闭状态。调试器运行后,可以分别使用.symopt + 0x40或.symopt-0x40打开或关闭它。
答案 1 :(得分:0)
“这真的会导致调试器无法加载符号文件吗?”......
是:每次构建二进制+ pdb时,它们都会获得一个新的GUID。因此,除了dumpfile和新PDB文件之间的时间戳差异之外,GUID也将关闭。