一直不是很了解.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的偵錯設定
三個地方的先後順序應該是這樣的
1.執行目錄
2.ddl內記載的目錄
3.偵錯設定中的目錄
另外,也可以手動從「模組視窗」中手動載入
但如果vs載入了pdb檔,但卻找不到pdb記錄的source code file,則vs會直接跳一個視窗叫你告訴它檔案在哪裡。
最後,如果pdb載入了,也順利找到了原始檔,但原始檔卻被編輯過,那偵錯時就會讓人覺得怪怪的,這是因為原始程式碼檔案已經跟dll不符合的關係
不過讓我覺得很奇怪的是,即使我是在Release模式下去編譯,仍然會產出pdb檔,而且dll內也照樣記錄著pdb檔的位置。
用dumpbin看到的資訊
查到這裡,大致上對pdb有了初步的認識,唯一覺得可惜的是沒辦法看到pdb檔的實際內容。唉,殘念!!
[2010/4/18] 補上對 pdb 檔的內容的新發現
留言列表