3

这可能归结为我对 PDB 文件和构建过程的误解,而不是任何特定问题,但我一直在努力在其他地方找到一个好的答案。

我们最近成为了优秀的小开发人员,并开始在中央符号服务器(TFS 的所有部分)上索引和存储我们的 pdb 文件。问题是我们的 PDB 文件似乎没有包含所有源信息。

当尝试导航到 Visual Studio 中的源时,会找到我们程序集的 pdb 文件,如输出窗口所示:

PdbNavigator: Downloader: file://server/Symbols/my.assembly.pdb/1DB3F79EA3094EAAADFC6CDE6515FC871/my.assembly.pdb -> ok, 251 KB
PdbNavigator: No debugging information found on symbol servers for my.assembly, Version=1.0.1.1206, Culture=neutral, PublicKeyToken=4cd79aeab39b919b

但同时它说它没有找到任何来源。如果我使用 windows SDK 中的一些工具,我可以看到 PDB 文件不包含项目中大约 30% 的源文件的信息。

我想我在某处读到 PDB 文件只包含项目中实际使用的类的源代码,但这肯定会给任何 API 类型的程序集带来巨大的问题,其中多个类可能在程序集中没有功能,只有在从其他部分使用时你的项目?

如果有人可以阐明这一点,请告诉我。

谢谢。

4

1 回答 1

0

PDB(通常)不存储源代码 - 它包含“文档”列表,即源代码文件名和“方法信息”,它将源代码行映射到程序集或二进制文件中的偏移量。当程序集的签名和生成日期与 PDB 文件中的相同时,PDB 匹配。很有可能,MyAssembly.pdb 具有正确的版本,但签名和/或构建日期不匹配。

据我所知,签名没有公开,但是您可能会在Internet上找到一些代码,说明如何读取PE签名和PDB签名,以便您进行比较。

于 2015-06-11T20:36:51.567 回答