1. 程式人生 > 實用技巧 >在dockers中除錯dump的dotnet程式(轉發)

在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

build出來image

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