大部分的開發人員應該都知道pdb檔案是用來幫助軟體的除錯的。但是他究竟是如何工作的呢,我們可能並不熟悉。本文描述了pdb檔案的儲存和內容。同時還描 述了debugger如何找到binay相應的pdb檔案,以及debugger如何找到與binay對應的源**檔案。本文適用於所有的native和 managed的開發人員。
在開始前,我們先定義2個術語:private build, 用來表示在開發人員自己機器上生成的build;public build,表示在公用的build機器上生成的build。private build相對來說比較簡單,因為pdb和binay在相同的地方,通常地我們遇到的問題都是關於public build。
所有的的開發人員需要知道的最重要的事情是」pdb檔案跟源**同樣的重要「, 沒有pdb檔案,你甚至不能debugging。對於public build,需要symbol server儲存所有的pdb,然後當使用者報告錯誤的時候,debugger才可以自動地找到binay相應的pdb檔案, visual studio 和 windbg都知道如何訪問symbol server。在將pdb和binay儲存到symbol server前,還需要對pdb執行進行source indexing, source indexing的作用是將pdb和source關聯起來。
接下來的部分假設有已經設定好了symbol server和source server indexing。tfs2010中可以很簡單地完成對乙個新的build的source indexing 和 symbol server copying。
正式開始pdb的內容,pdb不是公開的檔案格式,但是microsoft提供了api來幫助從pdb中獲取資料。
native c++ pdb包含了如下的資訊:
* public,private 和static函式位址;
* 全域性變數的名字和位址;
* 引數和區域性變數的名字和在堆疊的偏移量;
* class,structure 和資料的型別定義;
* frame pointer omission 資料,用來在x86上的native堆疊的遍歷;
* 源**檔案的名字和行數;
.net pdb只包含了2部分資訊:
* 源**檔案名字和行數;
* 和區域性變數的名字;
* 所有的其他的資料都已經包含在了.net metadata中了;
在你開啟了development模式後,如果devpath沒有定義或路徑不存在的話會導致程式啟動時異常"invalid value for registry"。而且如果在machine.config中開啟devpath的使用會影響其他的所有的程式,所以要慎重使用machine.config。
最後開發人員需要知道的是源**資訊是如何儲存在pdb檔案中的。對於public builds,在執行source indexing tool後,版本控制工具將**儲存到你設定的**cache中。對於private builds,只是儲存了pdb檔案的全路徑,例如在c:\foo下的原始檔mycode.cpp,在pdb檔案中儲存的路徑為c:\foo\mycode.cpp。對於private builds可以使用虛擬盤來增加pdb對絕對路徑的依賴,例如可以使用subst.exe將源**路徑掛載為v:,在別人的機器上debug的時候也掛載v:。
PDB檔案 每個開發人員都必須知道的
pdb files what every developer must know pdb檔案 每個開發人員都必須知道的 一 什麼是pdb檔案 大部分的開發人員應該都知道pdb檔案是用來幫助軟體的除錯的。但是他究竟是如何工作的呢,我們可能並不熟悉。本文描述了pdb檔案的儲存和內容。同時還描 述了deb...
PDB檔案 每個開發人員都必須知道的
pdb files what every developer must know pdb檔案 每個開發人員都必須知道的 一 什麼是pdb檔案 大部分的開發人員應該都知道pdb檔案是用來幫助軟體的除錯的。但是他究竟是如何工作的呢,我們可能並不熟悉。本文描述了pdb檔案的儲存和內容。同時還描 述了deb...
PDB檔案 每個開發人員都必須知道的
pdb files what every developer must know pdb檔案 每個開發人員都必須知道的 一 什麼是pdb檔案 大部分的開發人員應該都知道pdb檔案是用來幫助軟體的除錯的。但是他究竟是如何工作的呢,我們可能並不熟悉。本文描述了pdb檔案的儲存和內容。同時還描 述了deb...