對 Linux 傾印進行偵錯

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

在 Linux 上收集傾印

提示

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

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

在 Linux 上分析傾印

收集傾印後,即可用 dotnet-dump 工具搭配 dotnet-dump analyze 命令進行分析。 這項分析步驟需在與擷取傾印環境具備相同結構和 Linux 發行版本的機器上執行。 dotnet-dump 工具支援顯示 .NET 程式碼的資訊,但並不適合用於理解 C 和 C++ 等其他語言的程式碼問題。

或者,您可改用 LLDB 分析 Linux 上的傾印,這項工具能同時分析受控程式碼和機器碼。 LLDB 使用 SOS 延伸模組為受控程式碼進行偵錯。 dotnet-sos CLI 工具可用來安裝 SOS,其具備諸多實用命令,可用來為受控程式碼進行偵錯。 為了分析 .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> 設定要查詢符號檔案的路徑。

取得必要檔案後,只要將 dotnet 主機指定為偵錯的可執行檔,就能在 LLDB 中載入傾印:

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 上的傾印

Linux 機器收集到的傾印也可在 Windows 機器上使用 Visual StudioWindbgdotnet-dump 工具進行分析。 Visual Studio 和 Windbg 都能分析機器碼和受控程式碼,而 dotnet-dump 只能分析受控程式碼。

注意

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 版本。
  • dotnet-dump:請用 dotnet-dump 分析 命令來檢視傾印。 針對 Linux x64 或 Arm64 環境收集到的傾印,請使用 x64 版本的 dotnet-dump;針對 Linux x86 環境收集到的傾印,請使用 x86 版本。

另請參閱