一直不是很了解.pdb檔(Program Database file),只知道它是用來偵錯的,但倒是從來沒有研究過裡面到底記載了什麼資訊。一直到今天有網友在偵錯時碰到問題,我才開始研究這個神奇的檔案。google了一下,找到這篇,原來pdb檔記錄了下面這些資訊:

1.source code file name
2.行號資訊
3.local variable name

而dll中則是記錄了這個pdb檔的位置,所以當我們按下F5進行偵錯時,會先到dll去找pdb的位置,然後再讀取pdb檔,接著依照pdb的記錄去找source code,然後就是我們看到的偵錯畫面。

除了dll內記錄的pdb檔位置之外,偵錯時還會去兩個地方找看看有沒有pdb可供載入,一個是專案的執行目錄,另一個則是vs的偵錯設定

pdb-location2

 

三個地方的先後順序應該是這樣的

1.執行目錄
2.ddl內記載的目錄
3.偵錯設定中的目錄

另外,也可以手動從「模組視窗」中手動載入

pdb-location5

 

但如果vs載入了pdb檔,但卻找不到pdb記錄的source code file,則vs會直接跳一個視窗叫你告訴它檔案在哪裡。

pdb-location4

 

最後,如果pdb載入了,也順利找到了原始檔,但原始檔卻被編輯過,那偵錯時就會讓人覺得怪怪的,這是因為原始程式碼檔案已經跟dll不符合的關係

 

 

不過讓我覺得很奇怪的是,即使我是在Release模式下去編譯,仍然會產出pdb檔,而且dll內也照樣記錄著pdb檔的位置。

用dumpbin看到的資訊

pdb-location3

 

 

查到這裡,大致上對pdb有了初步的認識,唯一覺得可惜的是沒辦法看到pdb檔的實際內容。唉,殘念!!

 

[2010/4/18] 補上對 pdb 檔的內容的新發現

 

arrow
arrow
    全站熱搜

    AnferneeHardaway 發表在 痞客邦 留言(0) 人氣()