.NETPDB文件是什么

這篇文章主要講解了“.NET PDB文件是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“.NET PDB文件是什么”吧!

創(chuàng)新互聯(lián)建站憑借專業(yè)的設(shè)計(jì)團(tuán)隊(duì)扎實(shí)的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識(shí)和豐厚的資源優(yōu)勢(shì),提供專業(yè)的網(wǎng)站策劃、網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都十載的網(wǎng)站建設(shè)設(shè)計(jì)經(jīng)驗(yàn),為成都上1000+中小型企業(yè)策劃設(shè)計(jì)了網(wǎng)站。

PDB全稱Program Database,不知道中文翻譯叫什么。相信使用過(guò)VS的人對(duì)于這個(gè)拓展名的文件不會(huì)陌生,這個(gè)文件主要會(huì)存儲(chǔ)對(duì)應(yīng)模塊(dll或者exe)內(nèi)部的所有符號(hào),以及符號(hào)對(duì)應(yīng)的地址、文件名和行號(hào)。

這個(gè)文件會(huì)在我們調(diào)試的時(shí)候被使用到,這個(gè)東西可以理解為調(diào)試的時(shí)候應(yīng)用程序和源文件之間的一個(gè)橋梁。正是歸功于這個(gè)文件,我們才能在debug的時(shí)候看到程序當(dāng)前執(zhí)行相對(duì)應(yīng)的代碼和監(jiān)視到一些變量。

PDB文件什么時(shí)候產(chǎn)生?

PDB文件是在我們編譯工程的時(shí)候產(chǎn)生的,它是和對(duì)應(yīng)的模塊(exe或dll)一起生成出來(lái)的。我們一般可能不會(huì)意識(shí)到PDB文件的重要性,因?yàn)槿绻皇俏覀儽镜剡M(jìn)行開發(fā),我們總是能夠進(jìn)行調(diào)適。這里我要引入兩個(gè)概念:Private Build和Public Build。Private Build指的是在開發(fā)機(jī)器上的編譯,Public Build指的是在負(fù)責(zé)編譯的機(jī)器上的編譯。

正如上面我所說(shuō)Private Build一般不會(huì)有問(wèn)題,因?yàn)樵诰幾g出來(lái)的機(jī)器上進(jìn)行調(diào)試所有必要的文件都在該在的地方。所有大部分不能調(diào)試的問(wèn)題都發(fā)生在Public Build的情況下。

如果你的應(yīng)用程序需要發(fā)布或者當(dāng)作產(chǎn)品賣得,你就需要特別注意要保存你發(fā)布出去的那個(gè)版本的PDB文件和源文件。注意:你只有一次機(jī)會(huì)保存著發(fā)布出去的PDB文件,如果你弄丟了將無(wú)法找回。<當(dāng)然使用Reflector 類似的工具去調(diào)試也是可以的>

為什么PDB這么重要?

也許你會(huì)認(rèn)為如果拿一份一模一樣的源代碼重新編譯一個(gè)PDB文件,然后用來(lái)調(diào)試就行了。我也曾經(jīng)這么認(rèn)為過(guò),直到有一天&hellip;......

直接的原因是因?yàn)閂S生成出來(lái)的二進(jìn)制文件的Header部分里面包含了它對(duì)應(yīng)的PDB的GUID,PDB也包含一個(gè)GUIID,這兩個(gè)GUID實(shí)在編譯的時(shí)候添加進(jìn)去的。VS調(diào)試器在載入PDB的時(shí)候會(huì)去比對(duì)這個(gè)兩個(gè)GUID,如果不一致,那么就不能使用。

當(dāng)然上面那個(gè)原因只是一個(gè)表面現(xiàn)象,根本原因是既是兩份一模一樣的代碼編譯器編譯出來(lái)的文件可能是不一樣的。因?yàn)榫幾g器在編譯的時(shí)候會(huì)對(duì)代碼進(jìn)行優(yōu)化,而同一份代碼可能會(huì)有很多種優(yōu)化的方法,它會(huì)根據(jù)當(dāng)時(shí)的具體機(jī)器的環(huán)境等情況選擇一個(gè)最快的生成方法。所以它生成出來(lái)的文件有可能是不一樣的!所以如果連生成出來(lái)的文件都不一樣,那么原來(lái)的那個(gè)PDB里面的符號(hào)對(duì)應(yīng)的地址也就沒(méi)有意義了。

如何查看二進(jìn)制文件和PDB的GUID?

使用VS自帶的DUMPBIN工具可以查看二進(jìn)制文件所期望的PDB的GUID?;居梅ň褪荄UMPBIN /HEADER 文件,具體用可可參考MSDN。

查看PDB的GUID可以用下面這個(gè)工具,直接將PDB拉進(jìn)去即可。http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P

PDB文件的查找策略

先上試驗(yàn)結(jié)果,可以再調(diào)試的時(shí)候從Visual Studio 的Module串口中查找到一個(gè)module的symbol的查找策略。從截圖中我們可以看到結(jié)果如下:

.NET PDB文件是什么

1. 文件被執(zhí)行或者被載入的地址

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

2.5 如果配置了符號(hào)服務(wù)器,第二步以后應(yīng)該先去符號(hào)服務(wù)器的緩存目錄下找,如果找不到再去符號(hào)服務(wù)器上去找。找到的話就會(huì)下載到緩存目錄。

3. 第三部分是我VS中設(shè)置的一些符號(hào)查詢的目錄,因?yàn)槲已b過(guò)Reflector所以默認(rèn)加了這幾個(gè)目錄在我的設(shè)置中。

4. Windows文件夾。

這里有一個(gè)比較有意思的現(xiàn)象就是,VS的查找策略都是會(huì)先找一個(gè)目錄下的symbol\exe\project.pdb,然后exe\project.pdb,***才找project.pdb。這個(gè)順序有點(diǎn)出人意料。

PDB文件會(huì)影響性能么?

可能有些人會(huì)覺(jué)得PDB文件的生成會(huì)對(duì)最終的應(yīng)用程序的性能產(chǎn)生一定的影響,所以覺(jué)得在發(fā)布版中不應(yīng)該生成PDB文件。

錯(cuò)!對(duì)于.NET應(yīng)用程序來(lái)說(shuō),生成PDB文件不會(huì)影響編譯器的優(yōu)化,所以也完全不會(huì)影響應(yīng)用的性能。只會(huì)對(duì)于生成的程序集中的一個(gè)DebuggableAttribute的屬性產(chǎn)生影響。有興趣的人可以閱讀Do PDB Files Affect Performance?

感謝各位的閱讀,以上就是“.NET PDB文件是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì).NET PDB文件是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

文章名稱:.NETPDB文件是什么
URL分享:http://muchs.cn/article24/ijopce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、App開發(fā)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)公司定制開發(fā)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司