dump net core lldb 安裝

原文https://www.cnblogs.com/calvinK/p/9263696.html

centos7下安裝lldb,dotnet netcore 進程生成轉儲文件,並使用lldb進行分析

隨着netcore應用在linux上部署的應用越來越多,碰到cpu 100%,內存暴漲的情況也一直偶有發生,在windows平臺下進程管理器右鍵轉儲,下載到本地使用windbg或者直接vs分析都比較方便。而在linux平臺下因爲一直接觸的不深,所以對這一塊也一直沒有比較好的瞭解。所以接下來的文章將對在centos7下安裝lldb,生成轉儲以及調試分析進行一些簡單說明。
還有就是一般產線的機器也不太會有可以直接調試的機會,所以真出現問題也只能在產線機器dump進程,然後下載到本地來慢慢分析。

環境說明:
os:centos7
dotnet :2.1.1。查看官方文檔2.0.0只能使用lldb 3.6;2.1以上必須是3.9.0;所以特別要注意版本問題,一個是createdump 2.0的有bug會失敗。二個是dotnet版本和lldb版本要匹配
被調試分析的應用也是用2.1跑起來的。

測試目標程序

yum install dotnet-sdk-2.1
dotnet new mvc
vi /mvc.csproj
#netcoreapp2.0 to netcoreapp2.1
#PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" to Version="2.1.1"
dotnet restore
dotnet build
dotnet ./bin/Debug/netcoreapp2.1/mvc.dll

centos7 升級GCC,安裝cmake

centos7 升級GCC版本到7.3.0
centos7 安裝cmake

centos7下安裝lldb調試工具

最開始直接使用給力網友的腳本進行安裝(腳本地址查看文章結尾參考資料),後發現3.9.1不能調試分析netcore應用,必須要3.9.0,所以在給力網友的腳本上略作修改後使用。修改後腳本地址https://github.com/czd890/shell/blob/master/llvm_clang_lldb/3.9.0/llvm_clang_install.sh。主要修改幾個地方:把lldb,libunwind移動到build_llvm_toolchain中,一次性安裝。check_and_download方法中檢查本地是否已下載源碼包的檢查略作修改,只判斷指定版本,編譯的時候修改爲make -j8(我本地機器8核)。

腳本大概思路就是下載如下所表示的組件所有源碼,除llvm外的其他組件源代碼解壓到llvm/tools目錄下,這樣子源代碼就全部準備好
BUILD_TARGET_COMPOMENTS="llvm clang compiler_rt libcxx libcxxabi clang_tools_extra lldb lld libunwind";
接下來就是編譯的過程了。

#安裝一些必要的依賴組件
yum install libedit-devel libxml2-devel ncurses-devel python-devel swig
#執行根據給力網友的腳本修改後的腳本

  

當然如果腳本下載速度慢,也是可以自己下載後上傳的目錄的。具體下載地址查看文章尾部參考資料 llvm,clang,lldb源代碼下載地址(3.9.0)
準備源代碼差不多就如下圖。然後 sh llvm_clang_install.sh開始執行腳本;
默認安裝目錄在 PREFIX_DIR=/usr/local/llvm-$LLVM_VERSION;。也就是是 /usr/local/llvm-3.9.0;可以在腳本的最開始對此進行修改。

開始執行,又是一段漫長的等待時間,8核併發編譯,耗費了估計得有1-2個小時。

刀片機的CPU都跑滿了!!!

出去吃完飯後回來,就看到完成拉。具體的path路徑可以選擇加不加都可以,加的話,直接/etc/profile export PATH=$PATH:llvm-path/bin即可

lldb安裝完成,我們的工作就完成一大半拉。

dotnet netcore應用如何生成內存轉儲文件

/usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.1/createdump 9364

  


具體命令解釋
createdump [options] pid
-f, --name - dump path and file name. The pid can be placed in the name with %d. The default is "/tmp/coredump.%d"
-n, --normal - create minidump (default).
-h, --withheap - create minidump with heap.
-t, --triage - create triage minidump.
-u, --full - create full core dump.
-d, --diag - enable diagnostic messages.

使用lldb調試分析netcore應用內存轉儲文件

#官方文檔上是這樣寫的。
/usr/local/llvm-3.9.0/bin/lldb -O "settings set target.exec-search-paths /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.1"  \
  -o "plugin load /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.1/libsosplugin.so" \
   --core /opt/dump\_file/mvcdumpmindump /usr/share/dotnet/dotnet
 #網友調試參考博客上是這樣寫的。 
/usr/local/llvm-3.9.0/bin/lldb dotnet \ -c /opt/dump\_file/mvcdumpmindump \ -o "plugin load /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.1/libsosplugin.so"

2種寫法都是可行的。然後具體的調試分析指令什麼的都在coreclr調試說明指導文檔有說明。

參考資料:
coreclr調試說明指導文檔
https://github.com/dotnet/coreclr/blob/master/Documentation/building/debugging-instructions.md
coreclr生成dmp說明指導文檔
https://github.com/dotnet/coreclr/blob/master/Documentation/botr/xplat-minidump-generation.md
llvm,clang,lldb源代碼下載地址(3.9.0)
http://releases.llvm.org/download.html#3.9.0
lldb源碼安裝指導文檔
http://lldb.llvm.org/build.html#BuildingLldbOnLinux
llvm源碼安裝指導文檔
http://releases.llvm.org/3.9.0/docs/GettingStarted.html
網友centos7安裝llvm,clang,lldb等給力腳本
https://github.com/owent-utils/bash-shell/blob/master/LLVM%26Clang%20Installer/3.9/installer.sh
網友調試參考博客文章
使用SOS調試工具檢查應用程序狀態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章