原文:
在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