為了調(diào)試編譯的應(yīng)用程序,有必要將IL代碼或二進(jìn)制的機(jī)器代碼與源代碼行進(jìn)行匹配。雖然數(shù)據(jù)可以嵌入在應(yīng)用程序中,但這會(huì)顯著增加EXE或DLL文件的大小。取而代之的是,通常會(huì)使用單獨(dú)的“symbols”文件。在Windows平臺(tái)上,這被稱為PDB或“程序數(shù)據(jù)庫(kù)”。
早期PDB格式是為了C和C++設(shè)計(jì)的,發(fā)展了多年以來(lái)現(xiàn)在已經(jīng)支持.NET了。不幸的是,這種格式一直以來(lái)都被認(rèn)為是專有的,這就意味著它沒(méi)有很好文檔記錄,而且只能使用Windows庫(kù)讀取。
有了.NET Core,就需要一個(gè)新的跨平臺(tái)PDB庫(kù)。然而,不僅僅只是轉(zhuǎn)移現(xiàn)有的庫(kù),Microsoft選擇重寫(xiě)Windows PDB格式。新的Portable PDB格式刪除了本地代碼所需的功能,只保留了.NET功能。通過(guò)這樣做,可以簡(jiǎn)化格式,并顯著減小PDB文件大小。
Portable PDB格式是公開(kāi)記錄的,還有用來(lái)讀取它的開(kāi)源庫(kù)。但有一些缺點(diǎn):Portable PDB格式不支持編輯及繼續(xù)、FXCop風(fēng)格代碼分析(Roslyn代碼分析可與運(yùn)行)、性能分析工具、后編譯構(gòu)建步驟,如AOP、Code Contracts或是.NET decompilers。這些局限會(huì)進(jìn)行改進(jìn),但需要時(shí)間來(lái)升級(jí)工具以支持新的格式。