對 Linux 傾印進行偵錯
本文適用於:✔️ .NET Core 3.0 SDK 與更新版本
在 Linux 上收集傾印
提示
如需傾印收集、分析和其他注意事項的常見問題,請參閱傾印:常見問題。
在 Linux 上收集傾印的兩種建議方式為:
dotnet-dump
CLI 工具- 於損毀時收集傾印的環境變數
在 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 二進位檔:
- libmscordaccore.so
- libcoreclr.so
- 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 Studio、Windbg 或 dotnet-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 版本。
另請參閱
- dotnet-sos,了解安裝 SOS 延伸模組的更多詳細資料。
- dotnet-symbol,了解安裝和使用符號下載工具的更多詳細資料。
- .NET Core 診斷存放庫,了解偵錯與實用常見問題的更多詳細資料。
- 安裝 LLDB,取得在 Linux 或 Mac 上安裝 LLDB 的指示。
- Linux 上的練習和疑難排解,取得在 Linux 上偵錯損毀傾印的教學課程