2013-05-02 85 views
3

這可能歸結爲我對PDB文件和構建過程的誤解,而不是任何特定的問題,但我一直在努力在其他地方找到一個好的答案。PDB文件不包括所有.net源信息

我們最近一直是很好的小開發者,並開始索引並將我們的pdb文件存儲在中央符號服務器(TFS的所有部分)上。問題在於我們的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

在項目的屬性頁面中,在違規項目的「生成」選項卡下,您是否看到「優化代碼」複選框?這是否被檢查? – Nicodemeus 2013-05-14 18:39:28

回答

0

PDB(通常)不存儲源代碼 - 它包含一系列「文檔」(源代碼文件名稱)和「方法信息」,它將源代碼行映射到程序集或二進制文件中的偏移量。當程序集的簽名和生成日期與PDB文件中的相同時,PDB匹配。很可能,MyAssembly.pdb具有正確的版本,但簽名和/或生成日期不匹配。

就我所知,簽名並未公開,但您可能會在Internet上找到一些代碼,說明如何讀取PE簽名和PDB簽名,以便您可以進行比較。