这可能归结为我对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类型程序集造成大量问题,其中多个类在程序集中可能没有任何功能,只有在从您项目的其他部分?
如果有人能说清楚这一点,请告诉我。
感谢。
答案 0 :(得分:0)
PDB(通常)不存储源代码 - 它包含一个“文档”列表,它是源代码文件名,以及“方法信息”,它将源行映射到汇编或二进制中的偏移量。当程序集的签名和构建日期与PDB文件中的相同时,PDB会匹配。很可能,MyAssembly.pdb具有正确的版本,但签名和/或构建日期不匹配。
据我所知,签名并未公开,但您可能会在Internet上找到一些代码,说明如何读取PE签名和PDB签名,以便进行比较。