我们发布了一个产品(C#.NET库),并没有存储库的pdb文件,假设我们总是可以使用相同的源代码生成符号文件。
现在,我们要分析正在使用我们的库的应用程序的崩溃转储(小型转储)文件。 由于我们没有存储 pdb 文件,我使用相同的源代码创建了一个新文件(在 SVN 中使用相同的标签)。然后我尝试了 WinDbg 并提供了 pdb 文件,但调试器不喜欢它。
由于源代码相同,我认为唯一的区别是构建完成的日期(我们使用同一台机器进行发布)。这真的会导致调试器无法加载符号文件吗? WinDbg 是如何识别符号文件的?
如果我确定符号文件与原始文件相同(日期除外),是否有办法强制 WinDbg 加载符号文件?
谢谢。
注意:如果我制作新版本并人为创建转储文件,符号将正确加载。
最佳答案
在不更改源的情况下重建将更改 pdb 文件。请参阅 John Robbins 的博客条目 PDB FILES: WHAT EVERY DEVELOPER MUST KNOW血淋淋的细节。
您需要告诉 WinDbg 不要对它准备加载的符号文件挑剔。来自(一位稍老的)WinDbg 帮助文件:
SYMOPT_LOAD_ANYTHING
此符号选项降低了符号处理程序在尝试匹配符号时的挑剔性。
此选项默认关闭。调试器运行后,可以分别使用 .symopt+0x40 或 .symopt-0x40 打开或关闭它。
关于c# - WinDbg 不加载使用相同源创建但在与原始时间不同的时间构建的符号文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1676040/