系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > PDB是什么文件?PDB文件詳解

PDB是什么文件?PDB文件格式詳解

時間:2017-07-28 10:50:57 作者:chunhua 來源:系統(tǒng)之家 1. 掃描二維碼隨時看資訊 2. 請使用手機瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20170728/103580.html 手機查看 評論

  PDB是什么文件?一些用戶在操作電腦的時候,可能會碰到后綴名為.pdb的文件,該文件是程序數(shù)據(jù)庫文件,相信很多用戶對于PDB文件都不了解,下面小編將給大家科普下PDB文件知識,請大家耐心閱讀下文。

PDB是什么文件?PDB文件格式詳解

  一、PDB文件的介紹

  PDB(Program Data Base),意即程序的基本數(shù)據(jù),是VS編譯鏈接時生成的文件。PDB文件主要存儲了VS調(diào)試程序時所需要的基本信息,主要包括源文件名、變量名、函數(shù)名、FPO(幀指針)、對應(yīng)的行號等等。因為存儲的是調(diào)試信息,所以一般情況下PDB文件是在Debug模式下才會生成。

  二、PDB文件的調(diào)用過程

  模塊(Module),EXE和DLL都可以稱之為模塊,因為它們都有自已獨立的Stack,所以我們在調(diào)試程序時,可以在Call Stack窗口查看到所有調(diào)用的Module Name。并且可以右鍵查看相應(yīng)模塊的ybmol Load Information,即該模塊調(diào)用的PDB文件路徑的過程。

  每個模塊被載入的時候,其相同名字的PDB文件同時被載入。所以Debug模式下,不僅因為代碼沒有優(yōu)化,同時因為要載入PDB文件,所以Debug模式下的程序執(zhí)行速度非常慢。

  每個模塊只會生成一個相同名字的PDB文件,并且模塊生成的同時,會校驗PDB文件生成GUID記錄在模塊內(nèi)。這是因為調(diào)試時,調(diào)試器強制要求每個模塊必須和PDB文件保持一致。實驗過程中,用之前生成的PDB文件替換當(dāng)前生成的PDB文件時,Debug窗口會顯示No symbols loaded. MSDN也做了相應(yīng)的說明:The debugger will load only a PDB for a binary that exactly matches the PDB that was created when the binary was built.

  PDB文件中記錄了源文件路徑的相關(guān)信息,所以在載入PDB文件的時候,就可以將相關(guān)調(diào)試信息與源碼對應(yīng)。這樣可以可視化的實時查看調(diào)試時的函數(shù)調(diào)用、變量值等相關(guān)信息。模塊當(dāng)中記錄的PDB文件是絕對路徑。所以只要模塊在當(dāng)前電腦上載入,調(diào)試器自然地會根據(jù)模塊當(dāng)中的路徑信息找到相應(yīng)PDB文件并載入。同樣PDB文件中記錄的源文件路徑也是絕對路徑,所以PDB文件只要在當(dāng)前電腦上載入,調(diào)試進(jìn)入相應(yīng)模塊時,都能夠匹配到記錄的源文件,然后可視化地查看相應(yīng)信息。

  如果源文件找不到,那么依然能夠查看調(diào)試信息,只是這個時候只能查看匯編代碼,不能通過源文件可視化查看信息。一般情況下,絕大多數(shù)C++程序員不具備閱讀匯編代碼的能力。所以完全通過PDB文件調(diào)試,意義與作用均沒有多大。如果要讓其他人能夠調(diào)試自已的代碼,PDB文件和源碼都應(yīng)該提供,只提供PDB文件的意義不大。如果確實有類似的需求,可以保留相應(yīng)生成的PDB文件。微軟的很多庫默認(rèn)是不提供PDB文件的,但是近來微軟逐漸開放了一些庫的PDB文件。

  三、VS搜索PDB文件的路徑順序

  MSDN中詳細(xì)的講述:

  1、The Visual Studio debugger uses the path to the PDB in the EXE or DLL file to find the project.PDB file.

  2、 If the debugger cannot find the PDB file at that location or if the path is invalid (for example, if the project was moved to another computer), the debugger searches the path containing the EXE.

  3、 the symbol paths specified in the Options dialog box (Debugging folder, Symbols node)。

  1是默認(rèn)當(dāng)前路徑,2是編譯鏈接時記錄在模塊當(dāng)中的路徑,F(xiàn)在重點說3,即設(shè)置符號文件路徑。

  1)通過Options-》Debuggin-》Symbols或在Call Stack窗口右鍵找到Symbol Settings打開下面的窗口。

PDB是什么文件?PDB文件格式詳解

  2)小編將PDF的生成路徑調(diào)整到D:\,調(diào)試時將PFB文件剪切到D:\Other目錄。

PDB是什么文件?PDB文件格式詳解

  3)然后調(diào)試進(jìn)入dll模塊時,右鍵在Call Stack對應(yīng)的Module上選擇查看Symbol Load Information.

  4)通過上圖即可以看到VS加載PDB文件的順序,這與MSDN中介紹的是一樣的。

  5)Symbol Settings窗口里,還可以從服務(wù)器上緩存符號文件,可是小編試了很多方式,均沒有成功。

  為什么講這個設(shè)置符號文件呢?因為有時候,有些項目非常龐大,并且代碼是共享的,所以代碼會放到服務(wù)器上。很多很大PDB調(diào)試文件,如果拷貝到本地電腦上比較麻煩。這個時候,就可以指定網(wǎng)絡(luò)路徑,直接通過網(wǎng)絡(luò)路徑調(diào)試。

  四、靜態(tài)庫的PDB文件

  靜態(tài)庫也有自已的PDB文件,只不過其名字是VC80.PDB/VC100.PDB這樣的名字。靜態(tài)庫的PDB文件會在鏈接時合并到EXE/DLL的PDB文件中去。如果生成的靜態(tài)庫lib里有記錄相應(yīng)的PDB文件,卻又沒有相應(yīng)的PDB文件,那么靜態(tài)庫鏈接成EXE/DLL時就會報警告找不到靜態(tài)庫對應(yīng)的PDB文件。所以如果靜態(tài)庫作第三方庫發(fā)布時,可以不用生成PDB文件,這樣調(diào)用者鏈接時就不會報警告。

  關(guān)于PDB文件就給大家介紹到這里了,有興趣的伙伴,可以好好看看小編整理的教程哦!

標(biāo)簽 pdb

發(fā)表評論

0

沒有更多評論了

評論就這些咯,讓大家也知道你的獨特見解

立即評論

以上留言僅代表用戶個人觀點,不代表系統(tǒng)之家立場

其他版本軟件

人氣教程排行

相關(guān)系統(tǒng)推薦

官方交流群 軟件收錄