共用方式為


符號

符號適用於偵錯和其他診斷工具。 符號檔的內容會因語言、編譯程式和平臺而異。 概括而言,符號是原始程式碼與編譯程式所產生的二進位檔之間的對應。 Visual StudioVisual Studio Code 等工具會使用這些對應來解析源行號資訊或局部變數名稱。

關於符號的 Windows 檔包含 Windows 符號的詳細資訊,不過許多概念也適用於其他平臺。

瞭解 。NET 的可攜式 PDB 格式

.NET Core 引進了新的符號檔 (PDB) 格式 - 可攜式 PDB。 不同於傳統 PDB,這是僅限 Windows 的可攜式 PDB,可以在所有平臺上建立和讀取。

什麼是 PDB?

PDB 檔案是編譯程式所產生的輔助檔案,可提供其他工具,特別是調試程式、主要可執行檔中內容及其產生方式的相關信息。 例如,調試程式會讀取 PDB,將foo.cs行 12 對應至正確的可執行檔位置,以便設定斷點。 Windows PDB 格式問世已久,且從更早的原生偵錯符號格式演變而來。 它最初是針對原生(C/C++)程式設計的格式。 針對 .NET Framework 的第一個版本,Windows PDB 格式已擴充以支援 .NET。

可攜式 PDB 格式是在 .NET Core 中引進的,而且預設會在以 .NET 為目標時使用。 以 .NET Framework 為目標時,您可以在項目檔中指定 <DebugType>portable</DebugType> 來啟用可攜式 PDB 符號。 可攜式 PDB 格式是以 ECMA-335 元數據格式為基礎。 如需詳細資訊,請參閱 可攜式 PDB v1.0:格式規格。 診斷工具可以使用連結 System.Reflection.Metadata 庫來讀取可攜式 PDB 檔案(例如,請參閱 System.Reflection.Metadata.Document)。

針對您的案例使用正確的 PDB 格式

任何地方都不支援可攜式 PDB 和 Windows PDB。 若要決定要使用的格式,請考慮要使用和偵錯專案的位置。 如果您有想要以兩種格式使用和偵錯的專案,您可以使用不同的組建組態,並建置專案兩次,以支援這兩種類型的取用者。

支援可攜式 PDB

任何作業系統都可以讀取可攜式 PDB,並且是受控代碼的建議符號格式。 不過,有一些舊版工具和應用程式不受支援:

  • 以 .NET Framework 4.7.1 或更早版本為目標的應用程式:列印帶有對應回行號的堆疊追蹤(例如在 ASP.NET 錯誤頁面中)。 方法名稱不受影響,但來源檔案名和行號不受支援。

  • 當您使用 ildasm 或 .NET 反映器等 .NET 反編譯程式時,不會看到源行對應或本機參數名稱。

  • 使用 DIA 讀取符號的最新版本 DIA 和工具,例如 WinDBG,支援可攜式 PDB,但較舊的版本則不支援。

  • 可能有舊版的分析工具不支援可攜式 PDB。

若要在不支持這些 PDB 的工具上使用可攜式 PDB,您可以使用 Pdb2Pdb,在可攜式 PDB 與 Windows PDB 之間轉換。

支援 Windows PDB

Windows PDB 只能在 Windows 上寫入或讀取。 針對受控程式碼使用 Windows PDB 已經過時,而且僅適用於過去的工具。 建議您使用可攜式 PDB 而非 Windows PDB,因為某些較新的編譯程式功能只會針對可攜式 PDB 實作。

另請參閱