2009-11-04 25 views
3

我们发布了一个产品(C#.NET库),并未存储库的pdb文件,假设我们始终可以使用相同的源代码生成符号文件。WinDbg不会加载使用相同的源创建的符号文件,但它的构建时间与原始版本不同

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

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

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

谢谢。

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

回答

6

重建而不更改源将改变pdb文件。查看约翰罗宾斯的博客文章PDB FILES: WHAT EVERY DEVELOPER MUST KNOW了解血淋淋的细节。

您需要告诉WinDbg对它准备加载的符号文件不那么挑剔。从(略有老年人)WinDbg的帮助文件:

​​

此符号选项将减少当它试图匹配符号的符号处理器的pickiness。

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

+0

.symopt + 0x40解决了我们的问题:)此外,博客条目非常有用。谢谢 – user202869 2009-11-06 18:31:20

0

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

是:每次二进制+ PDB的打造,他们得到一个新的GUID。因此,除了转储文件和新PDB文件之间的时间戳差异之外,GUID将关闭。

相关问题