3

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

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

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

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

谢谢。

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

4

2 回答 2

6

在不更改源的情况下进行重建将更改 pdb 文件。有关血腥细节,请参阅 John Robbins 的博客条目PDB 文件:每个开发人员都必须知道的内容。

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

SYMOPT_LOAD_ANYTHING

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

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

于 2009-11-04T19:47:19.240 回答
0

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

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

于 2009-11-04T19:57:54.967 回答