共用方式為


偵錯Linux傾印

本文適用於: ✔️ .NET Core 3.0 SDK 與更新版本

在 Linux 上收集轉儲

小提示

如需有關傾印收集、分析和其他注意事項的常見問題,請參閱 傾印:常見問題

在 Linux 上收集傾印的兩種建議方式如下:

分析 Linux 上的傾印

收集傾印之後,您可以使用 dotnet-dump 工具搭配 dotnet-dump analyze 命令進行分析。 此分析步驟必須在具有與轉儲環境相同架構和 Linux 發行版的電腦上執行。 此工具支持顯示 .NET 程式 dotnet-dump 代碼的相關信息,但對於瞭解 C 和 C++ 等其他語言的程式代碼問題並無用處。

或者,LLDB 可以用來分析 Linux 上的傾印,以分析 managed 和本機碼。 LLDB 會使用SOS擴充功能來偵錯 Managed 程式代碼。 dotnet-sos CLI 工具可用來安裝 SOS,其有許多有用的命令可用來偵錯 Managed 程式代碼。 為了分析 .NET Core 轉儲,LLDB 和 SOS 需要從生成轉儲的環境中取得下列 .NET Core 二進位檔案:

  1. libmscordaccore.so
  2. libcoreclr.so
  3. dotnet (主機用來啟動應用程式)

在大部分情況下,可以使用dotnet-symbol工具下載這些二進位檔。 如果無法使用 dotnet-symbol 下載必要的二進制檔(例如,正在使用從源建置的私人版本 .NET Core),可能需要從創建記憶體傾印的環境中複制上述檔案。 如果檔案不在傾印檔案旁邊,您可以使用 LLDB/SOS 命令 setclrpath <path> 來設定應該載入的路徑,並 setsymbolserver -directory <path> 設定要尋找符號檔的路徑。

當必要檔案可用時,可以在 LLDB 中載入傾印,方法是將 dotnet 主機指定為需要偵錯的可執行檔。

lldb --core <dump-file> <host-program>

在上一個命令中, <dump-file> 是要分析的傾印路徑,而且 <host-program> 是啟動 .NET Core 應用程式的原生程式。 這通常是 dotnet 二進位檔,除非應用程式是獨立的,在此情況下,它是沒有 .dll 延伸模組的應用程式名稱。

一旦 LLDB 啟動時,可能需要使用 setsymbolserver 命令來指向正確的符號位置(setsymbolserver -ms 若要使用Microsoft的符號伺服器或 setsymbolserver -directory <path> 指定本機路徑)。 若要載入原生符號,請執行 loadsymbols。 此時,您可以使用 SOS 命令 來分析傾印。

備註

您可以使用 命令來安裝 LLDB sudo apt-get install lldb

分析 Windows 上的傾印

您也可以使用 Visual StudioWindbgdotnet-dump 工具,在 Windows 電腦上分析從 Linux 系統收集的傾印。 Visual Studio 和 Windbg 都可以分析原生和 Managed 程式代碼,而 dotnet-dump 只會分析 Managed 程式代碼。

備註

Visual Studio 16.8 版和更新版本可讓您開啟和分析在 .NET Core 3.1.7 或更新版本上產生的 Linux 傾印

  • Visual Studio - 請參閱 Visual Studio 記憶體轉儲偵錯指南
  • Windbg - 您可以使用用來偵錯 Windows 使用者模式傾印 的相同指示 ,對 windbg 上的 Linux 傾印進行偵錯。 針對從 Linux x64 或 Arm64 環境收集的傾印檔,請使用 x64 版本的 windbg;而針對從 Linux x86 環境收集的傾印檔,請使用 x86 版本的 windbg。
  • dotnet-dump - 使用 dotnet-dump analyze 命令來檢視記憶體傾印檔案。 使用 x64 版的 dotnet-dump 來處理從 Linux x64 或 Arm64 環境收集的傾印檔,及使用 x86 版來處理從 Linux x86 環境收集的傾印檔。

另請參閱