pdb是什么文件?

pdb是指程序數據庫文件,存儲程序的所有調試信息數據。pdb文件主要會存儲對應模塊(dll或者exe)內部的所有符號,以及符號對應的地址、文件名和行號;會在我們調試的時候被使用到,這個東西可以理解為調試的時候應用程序和源文件之間的一個橋梁。

四方臺網站建設公司創新互聯,四方臺網站設計制作,有大型網站制作公司豐富經驗。已為四方臺上千提供企業網站建設服務。企業網站搭建\外貿網站建設要多少錢,請找那個售后服務好的四方臺做網站的公司定做!

PDB(Program DataBase),全稱為“程序數據庫”文件。相信使用過VS的人對于這個拓展名的文件不會陌生,這個文件主要會存儲對應模塊(dll或者exe)內部的所有符號,以及符號對應的地址、文件名和行號。

這個文件會在我們調試的時候被使用到,這個東西可以理解為調試的時候應用程序和源文件之間的一個橋梁。正是歸功于這個文件,我們才能在debug的時候看到程序當前執行相對應的代碼和監視到一些變量。

PDB文件什么時候產生?

PDB文件是在我們編譯工程的時候產生的,它是和對應的模塊(exe或dll)一起生成出來的。我們一般可能不會意識到PDB文件的重要性,因為如果只是我們本地進行開發,我們總是能夠進行調適。這里我要引入兩個概念:Private Build和Public Build1。Private Build指的是在開發機器上的編譯,Public Build指的是在負責編譯的機器上的編譯。

正如上面我所說Private Build一般不會有問題,因為在編譯出來的機器上進行調試所有必要的文件都在該在的地方。所有大部分不能調試的問題都發生在Public Build的情況下。

如果你的應用程序需要發布或者當作產品賣得,你就需要特別注意要保存你發布出去的那個版本的PDB文件和源文件。注意:你只有一次機會保存著發布出去的PDB文件,如果你弄丟了將無法找回。2(原因下面說明)<當然使用Reflector 類似的工具去調試也是可以的>

為什么PDB這么重要?

也許你會認為如果拿一份一模一樣的源代碼重新編譯一個PDB文件,然后用來調試就行了。我也曾經這么認為過,直到有一天…......

直接的原因是因為VS生成出來的二進制文件的Header部分里面包含了它對應的PDB的GUID,PDB也包含一個GUIID,這兩個GUID實在編譯的時候添加進去的。VS調試器在載入PDB的時候會去比對這個兩個GUID,如果不一致,那么就不能使用。

當然上面那個原因只是一個表面現象,根本原因是既是兩份一模一樣的代碼編譯器編譯出來的文件可能是不一樣的。因為編譯器在編譯的時候會對代碼進行優化,而同一份代碼可能會有很多種優化的方法,它會根據當時的具體機器的環境等情況選擇一個最快的生成方法。所以它生成出來的文件有可能是不一樣的!所以如果連生成出來的文件都不一樣,那么原來的那個PDB里面的符號對應的地址也就沒有意義了。

如何查看二進制文件和PDB的GUID?

使用VS自帶的DUMPBIN工具可以查看二進制文件所期望的PDB的GUID。基本用法就是DUMPBIN /HEADER 文件,具體用可可參考MSDN(http://msdn.microsoft.com/zh-cn/library/c1h23y6c(v=vs.80).aspx)。

查看PDB的GUID可以用下面這個工具,直接將PDB拉進去即可。

http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P

PDB文件的查找策略

先上試驗結果,可以再調試的時候從Visual Studio 的Module串口中查找到一個module的symbol的查找策略。從截圖中我們可以看到結果如下:

1. 文件被執行或者被載入的地址

2. 就是硬編碼在PE文件頭中的那個地址。大家可以看到obj\\<config>才是最原始生成的地址,只是之后被拷貝到了第一個地址中去了。

2.5 如果配置了符號服務器,第二步以后應該先去符號服務器的緩存目錄下找,如果找不到再去符號服務器上去找。找到的話就會下載到緩存目錄。

3. 第三部分是我VS中設置的一些符號查詢的目錄,因為我裝過Reflector所以默認加了這幾個目錄在我的設置中。

4. Windows文件夾。

這里有一個比較有意思的現象就是,VS的查找策略都是會先找一個目錄下的symbol\\exe\\project.pdb,然后exe\\project.pdb,最后才找project.pdb。這個順序有點出人意料。

PDB文件會影響性能么?

可能有些人會覺得PDB文件的生成會對最終的應用程序的性能產生一定的影響,所以覺得在發布版中不應該生成PDB文件。

錯!對于.NET應用程序來說,生成PDB文件不會影響編譯器的優化,所以也完全不會影響應用的性能。只會對于生成的程序集中的一個DebuggableAttribute的屬性產生影響。有興趣的人可以閱讀Do PDB Files Affect Performance?

相關視頻教程推薦:《ASP.NET教程》

網站標題:pdb是什么文件?
路徑分享:http://m.kartarina.com/article6/cpsoog.html

成都網站建設公司_創新互聯,為您提供面包屑導航App設計電子商務微信小程序網站營銷靜態網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設
主站蜘蛛池模板: 久久精品国产亚洲AV无码麻豆| 亚洲中文久久精品无码ww16| 久久精品无码一区二区三区免费| 无码人妻丰满熟妇啪啪网站| 蜜桃无码一区二区三区| 亚洲AV色无码乱码在线观看 | 无码h黄动漫在线播放网站| 无码少妇一区二区性色AV | 亚洲AV综合色区无码二区偷拍| 伊人久久大香线蕉无码| 亚洲中文字幕无码爆乳av中文| 国产在线精品无码二区| 亚洲精品9999久久久久无码| 亚洲区日韩区无码区| 无码精品国产一区二区三区免费| 亚洲精品无码mⅴ在线观看| heyzo高无码国产精品| 亚洲日韩精品A∨片无码加勒比| 国产色爽免费无码视频| 亚洲久热无码av中文字幕| 久久久久琪琪去精品色无码| 人妻少妇无码视频在线| JAVA性无码HD中文| 久久精品九九热无码免贵| 亚洲最大av无码网址| 亚洲精品无码中文久久字幕| 丰满熟妇乱又伦在线无码视频| 无码人妻aⅴ一区二区三区有奶水| 久久亚洲精品AB无码播放| 亚洲熟妇少妇任你躁在线观看无码| 成人无码区免费A片视频WWW| 亚洲色av性色在线观无码| 国产亚洲大尺度无码无码专线 | 无码国产69精品久久久久孕妇| 无码av免费一区二区三区试看| 国产成人无码av| 亚洲成AV人片在线观看无码| 亚洲av无码乱码在线观看野外| 亚洲中文字幕无码mv| 精品无码久久久久国产动漫3d| 久久精品无码一区二区无码|