成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.NET PDB文件到底是什么?

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

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

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

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

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

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

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

為什么PDB這么重要?

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

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

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

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

使用VS自帶的DUMPBIN工具可以查看二進制文件所期望的PDB的GUID。基本用法就是DUMPBIN /HEADER 文件,具體用可可參考MSDN

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

PDB文件的查找策略

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

 

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

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

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

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

4. Windows文件夾。

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

PDB文件會影響性能么?

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

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

小結(jié)

因為微軟并未公布PDB內(nèi)部細(xì)節(jié),只公開了一些API,所以對于這個文件一直是一個迷。本文只是寫了一些我學(xué)習(xí)到的以及我覺得.net程序員有必要知道的一些知識。如果其中有不對之處望指出,以后如果有更深入了解會另外補充。

原文鏈接:http://www.cnblogs.com/imjustice/archive/2013/06/07/note_about_dot_net_pdb_file.html

責(zé)任編輯:林師授 來源: 博客園
相關(guān)推薦

2020-10-14 06:22:14

UWB技術(shù)感知

2020-09-27 06:53:57

MavenCDNwrapper

2020-09-22 08:22:28

快充

2010-11-01 01:25:36

Windows NT

2011-04-27 09:30:48

企業(yè)架構(gòu)

2021-09-01 23:29:37

Golang語言gRPC

2021-01-21 21:24:34

DevOps開發(fā)工具

2021-02-05 10:03:31

區(qū)塊鏈技術(shù)智能

2020-03-05 10:28:19

MySQLMRR磁盤讀

2023-07-12 15:32:49

人工智能AI

2021-07-07 05:07:15

JDKIterator迭代器

2022-10-08 00:00:00

Spring數(shù)據(jù)庫項目

2024-02-04 00:01:00

云原生技術(shù)容器

2021-09-03 09:12:09

Linux中斷軟件

2019-10-30 10:13:15

區(qū)塊鏈技術(shù)支付寶

2010-04-22 14:14:29

Live-USB

2020-08-04 14:20:20

數(shù)據(jù)湖Hadoop數(shù)據(jù)倉庫

2023-10-11 08:29:54

volatileJava原子性

2025-03-28 01:33:00

2010-02-05 14:51:48

C++托管
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产视频久久久 | 日本三级线观看 视频 | 日日夜夜精品视频 | 日韩精品一区二区三区在线播放 | 国产欧美一区二区三区在线看 | 成人伊人 | 老牛影视av一区二区在线观看 | 色在线免费视频 | av三级 | 久久伦理电影 | 日本精品视频在线观看 | 亚洲精品电影在线观看 | 久草免费电影 | 欧美成人二区 | 国产免费一区二区 | 天堂精品视频 | 国产精品无 | 夜夜艹 | 久久久成人免费视频 | 亚洲综合二区 | 欧美日韩亚洲一区二区 | 日韩一区二区免费视频 | 日韩在线观看视频一区 | 青青草av| 天天久久| h视频在线播放 | 欧美一级免费看 | 午夜精品久久久久久久久久久久 | 久久蜜桃av一区二区天堂 | 成人在线中文字幕 | 人人操日日干 | 欧美中文字幕一区二区三区 | 91精品国产综合久久国产大片 | 国产我和子的乱视频网站 | 亚洲成人999| 国产精品无码久久久久 | 日韩中文字幕在线免费 | 国产精品久久久久久久久免费樱桃 | 亚洲成网| 美女视频. | 国产一区电影 |