未加載pdb文件解決方法 無法查找或打開pdb文件

未加載pdb文件解決方法,無法查找或打開pdb文件 。小編來告訴你更多相關信息 。
無法查找或打開pdb文件
關于這個無法查找或打開pdb文件和未加載pdb文件解決方法的相關介紹,相關內容具體如下:
前言
熟悉.Net開發的朋友會知道,項目在編譯時,除了可執行的.exe文件外,在運行目錄常常會生成.pdb的文件,好多人都不知道這個文件是干什么用的,今天就詳細介紹一下 。
介紹
本文幫助那些處于初級或中級水平的開發人員,但是他們對PDBs的重要性以及為什么需要它們沒有太多的理解 。
什么是PDB
PDB是程序數據庫文件的首字母縮寫 。
PDB文件通常是在編譯期間從源文件創建的 。它存儲模塊所有符號的列表,其中包含它們的地址,可能還有文件的名稱和聲明符號的行 。
為什么PDB是一個單獨的文件?
這些符號本來可以很容易地嵌入到二進制文件中,但反過來又會使二進制文件的大小變得更大(有時是幾兆字節) 。為了減少文件的大小,現代編譯器和早期的大型機調試系統將符號信息輸出到一個單獨的文件中,對于Microsoft編譯器,這個文件稱為.PDB文件 。
PDB文件包含什么?
以下是PDB文件存儲的一些重要信息:
局部變量名——為了證明pdb包含局部變量名,我們將利用反射器將其pdb在與程序集相同的文件夾中進行反編譯 。反射工具有一個選項,稱為“顯示PDB符號”,如屏幕截圖中所示,當檢查時也加載相應的PDB用于該程序集 。當您檢查選項,你可以看到反編譯的代碼相同的變量名,你的實際代碼,但在缺乏PDB或未經檢查該選項時,局部變量反編譯的代碼中,字符型變量名會被替換成“str”,數值型的則是“num”等等 。

未加載pdb文件解決方法 無法查找或打開pdb文件

文章插圖
源文件名字
源的行號 。
源索引(后面部分解釋)
要顯示PDB包含源文件名稱和源文件的行號(第2和第3),首先在相同的文件夾中運行以下控制臺應用程序,然后刪除PDB文件 。
namespace UnderstandingPDBs{ class Program { static void Main(string[] args) { try { int sum = Add(5, 10); decimal value = https://www.0579wy.com/article/Divide(10, 0); }catch { } }private static int Add(int i, int j) { return i + j; }private static decimal Divide(int i, int j) { try { return i / j; } catch (Exception ex) { LogError(ex); throw ex; } }private static void LogError(Exception ex) { using (var txtWriter = new StreamWriter(@/"dump.txt\",true)) { string error = \"Exception:\" + ex.Message +Environment.NewLine + \"StackTrace:\" + ex.StackTrace if(ex.InnerException!=null) error=error+\"INNER EXCEPTION:\"+ex.InnerException; txtWriter.WriteLine(error); } } }}如果目錄中存在PDB文件,下面是應用程序拋出的異常:
Exception:Attempted to divide by zero. StackTrace: at UnderstandingPDBs.Program.Divide(Int32 i, Int32 j) in C:UsersRishiDocumentsVisual Studio 2010ProjectsUnderstandingPDBsProgram.cs:line 33如果沒有PDB文件,異常信息如下:
【未加載pdb文件解決方法 無法查找或打開pdb文件】Exception:Attempted to divide by zero. StackTrace: at UnderstandingPDBs.Program.Divide(Int32 i, Int32 j) ---------顯然,帶有PDB的文件顯示了異常被拋出的類的行號和文件名 。
調試器如何加載PDB ?
Visual Studio調試器假設PDB文件位于與DLL或EXE相同的文件夾下 。每一次程序集編譯生成唯一的PDB文件,這意味著,即使沒有代碼改變,也不能使用在以前的編譯中創建的PDB文件 。調試器通過將PDB中的特定GUID與二進制的GUID進行比較,發現PDB是否跟二進制文件相匹配 。這個Guid在編譯過程中嵌入到二進制和PDB中,并將PDB與二進制文件緊密連接 。
Visual Studio中不同的Build設置 。
Visual Studio有3種不同的Build選項,可以控制調試符號的生成:
none:PDB文件將不會生成 。
pdbonly:調試符號只能在PDB文件中,而不是二進制文件中 。
Full:與PDB二進制中的符號一起也包含一些調試符號 。
Full是Visual Studio中設置的默認選項 。
參考MSDN文檔:
如果您使用/調試:full,請注意,JIT優化代碼的速度和大小會受到一定的影響,并且對代碼質量的影響很小 。我們建議/調試:pdbonly或沒有PDB來生成發布代碼 。
未加載pdb文件解決方法 無法查找或打開pdb文件

文章插圖
我們應該和二進制文件一起部署PDBs嗎?
如果交付件的大小不是問題,最好將PDB和其他二進制文件一起部署,因為它有助于提供更多關于異常的信息,就像我們在上面的例子中看到的那樣 。這些PDBs對于某些用戶在某些情況下會非常有用,因為某些用戶沒有PDB會使生活變得困難 。

推薦閱讀