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

.NET PDB文件到底是什么?

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

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

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

PDB文件什么時候產生?

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

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

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

為什么PDB這么重要?

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

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

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

如何查看二進制文件和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文件的查找策略

先上試驗結果,可以再調試的時候從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?

小結

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

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

責任編輯:林師授 來源: 博客園
相關推薦

2011-04-27 09:30:48

企業架構

2020-09-27 06:53:57

MavenCDNwrapper

2020-10-14 06:22:14

UWB技術感知

2020-09-22 08:22:28

快充

2010-11-01 01:25:36

Windows NT

2010-04-22 14:14:29

Live-USB

2020-08-04 14:20:20

數據湖Hadoop數據倉庫

2019-10-30 10:13:15

區塊鏈技術支付寶

2021-09-03 09:12:09

Linux中斷軟件

2021-01-21 21:24:34

DevOps開發工具

2021-02-05 10:03:31

區塊鏈技術智能

2021-07-07 05:07:15

JDKIterator迭代器

2023-07-12 15:32:49

人工智能AI

2024-02-04 00:01:00

云原生技術容器

2022-10-08 00:00:00

Spring數據庫項目

2021-09-01 23:29:37

Golang語言gRPC

2020-03-05 10:28:19

MySQLMRR磁盤讀

2012-07-26 09:55:39

云計算服務

2021-05-18 19:18:50

前端工程化工程

2023-03-26 12:27:30

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美日韩一区二区三区在线 | 亚洲欧美中文日韩在线v日本 | 中国免费黄色片 | 欧美a区| 伊色综合久久之综合久久 | 日韩欧美中文 | 日韩欧美亚洲综合 | 精品一区在线免费观看 | 中文字幕人成人 | 一级黄色毛片子 | 国产欧美精品在线观看 | 欧美福利 | 一区二区三区av夏目彩春 | 亚洲欧美视频一区 | 久久久男人的天堂 | 久久亚洲欧美日韩精品专区 | www.日韩高清 | 国产精品视频网站 | 欧美一级在线视频 | 成人h动漫精品一区二区器材 | 久久国产成人精品国产成人亚洲 | 国产精品久久久久久久免费大片 | 国产综合久久 | 九九久久精品视频 | 日韩精品在线观看免费 | 日韩不卡一区二区三区 | 国产色| 欧美日韩一区二区三区视频 | 久久久久久国产精品免费免费男同 | 激情五月婷婷综合 | 中文字幕在线一 | 久久国产精品精品国产色婷婷 | 日美女逼逼 | 中文字幕一区二区三区在线乱码 | 中文字幕av在线一二三区 | 亚洲精品视频在线观看视频 | 黄色成人免费在线观看 | 欧美二区在线 | 成人一区在线观看 | 天天碰日日操 | 91成人免费看 |