在dockers中除錯dump的dotnet程式(轉發)
原文:
在dockers中除錯dump的dotnet程式
其他除錯參考文章
centos7使用lldb除錯netcore應用轉儲dump檔案
centos7 lldb 除錯netcore應用的記憶體洩漏和死迴圈示例(dump檔案除錯)
生成dump檔案
如何在docker容器裡面建立dump檔案請參考:dotnet core除錯docker下生成的dump檔案
構建一個dotnet,lldb的docker image
dockerfile 檔案,基於microsoft/dotnet:2.2-sdk安裝lldb,docker builder -f dockerifle --pull -t dotnet-lldb
FROM microsoft/dotnet:2.2-sdk RUN apt-get update && apt-get install -y \ cmake llvm-3.9 \ clang-3.9 \ lldb-3.9 \ liblldb-3.9-dev \ libunwind8 \ libunwind8-dev \ gettext \ libicu-dev \ liblttng-ust-dev \ libcurl4-openssl-dev \ libssl-dev \ uuid-dev \ libnuma-dev \ libkrb5-dev
安裝dotnet-sos外掛
dotnet-sos外掛可以為我們的dump檔案自動選擇sos版本,可以有效避免因為dump程式所在機器和除錯所有機器安裝的dotnet sdk版本不一致帶來的The libcoreclr.so module is not loaded yet in the target process
錯誤問題。
dotnet tool install -g dotnet-sos
#外掛安裝完成後,執行
dotnet-sos install #如果找不到命令,可以到`~/.dotnet/tools`下面去。
安裝dotnet-symbol外掛
下載元件的符號檔案。方便有效檢視堆疊資訊
dotnet tool install -g dotnet-symbol
外掛安裝後,針對要除錯的dump檔案下載對應的符號,實用程式dotnet-symbol將自動為我們的dump檔案下載缺失的pdb檔案。
#cd 到一個dump檔案所在目錄
dotnet-symbol <dump檔案>
啟動lldb進行除錯
#在dump檔案目錄
lldb-3.9 dotnet -c <my dump file>
參考
https://github.com/dotnet/diagnostics
SOS實用工具:https://github.com/dotnet/diagnostics/blob/master/documentation/installing-sos-instructions.md
coredump除錯參考:https://github.com/dotnet/diagnostics/blob/master/documentation/debugging-coredump.md
SOS命令參考:https://github.com/dotnet/diagnostics/blob/master/documentation/sos-debugging-extension.md