2008-09-16 47 views
41

我聽說使用PDB文件可以幫助診斷髮生崩潰的位置。
我的基本的理解是你給Visual Studio的源文件,pdb文件和崩潰信息(來自Dr.Watson?)
有人可以請解釋它是如何工作的/涉及到什麼? (謝謝!)如何使用PDB文件

+0

謝謝你的答案至今(我會離開的問題打開的時間長一點) 我還發現這個有用: http://www.codeproject.com/KB/debug/postmortemdebug_standalone1.aspx – hamishmcn 2008-09-16 16:35:34

回答

30

PDB文件在生成項目時生成。它們包含有關Visual Studio可以解釋的構建的二進制文件的信息。

當程序崩潰並生成崩潰報告時,Visual Studio能夠獲取該報告並通過應用程序的PDB文件將其鏈接回源代碼。 PDB文件必須由生成崩潰報告的相同二進制文件構建!

隨着時間的推移,我們遇到了一些問題。

  • 調試崩潰報告的機器需要與構建二進制文件的計算機具有相同路徑的源。
  • 發佈版本經常優化的程度,你不能查看對象的成員變量

如果有人知道如何戰勝前,我會爲某些輸入感激的狀態。

+5

幫助源文件路徑的一種方法:使用SUBST將驅動器號映射到特定目錄。 http://technet.microsoft.com/en-us/library/bb491006.aspx – MarkJ 2010-06-09 15:56:20

+0

我見過的大多數調試器還允許您輸入任意路徑替換 - 但可能在Visual Studio中不可用。從來沒有嘗試過,但這是您通常需要做的調試其他人編譯的程序的其中一件事。 – jakobengblom2 2012-12-05 09:09:42

34

PDB文件將程序集的MSIL映射到原始源代碼行。這意味着如果您將與程序集一起編譯的PDB放在與程序集相同的目錄中,那麼異常堆棧跟蹤將具有原始源文件中位置的名稱和行。沒有PDB文件,只能看到堆棧跟蹤每個級別的類和方法的名稱。

+3

+1:爲了很好地描述「程序數據庫」(PDB)包含的內容。 – AMissico 2010-06-29 04:53:40

12

您應該考慮設置符號服務器並將PDB文件編入索引到您的源代碼控制系統。我最近剛剛完成了我們的產品的這個過程,它工作得很好。您不必擔心使用二進制文件提供PDB文件,也不必在調試轉儲文件時獲取適當的源代碼。

約翰羅賓斯的書:http://www.amazon.com/Debugging-Microsoft-NET-2-0-Applications/dp/0735622027/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1222366012&sr=8-1

看看這裏的生成小型轉儲一些示例代碼(它沒有被限制在崩潰後分析 - 你可以在你的代碼沒有任何一點生成它們崩潰):http://www.codeproject.com/KB/debug/postmortemdebug_standalone1.aspx