在dockers中调试dump的dotnet程序

其他调试参考文章

centos7使用lldb调试netcore应用转储dump文件
centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)

生成dump文件

dump一个运行在docker容器中的dotnet程序, 请参考:dotnet core调试docker下生成的dump文件
dump一个dotnet程序, 请参考文章: centos7使用lldb调试netcore应用转储dump文件里面的dotnet netcore应用如何生成内存转储文件小节.

构建一个dotnet,lldb的docker image

dockerfile 文件,基于microsoft/dotnet:2.2-sdk安装lldb,docker build --pull -t dotnet-lldb -f mydockerfile ./lldb_docker_build_dire build出来image. lldb_docker_build_dire目录是个空目录.

# mydockerfile
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

启动调试用的docker container

启动我们刚才构建出来的容器, 并把要调试的文件附加到容器中. mydumpfiledire目录下可以把dump文件copy进去, 同时也把我们的应用程序的pdb文件都copy进去.

docker run --rm -it -v /mydumpfiledire/:/mydumpfiledire/  dotnet-lldb /bin/bash

安装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`下面去。
# 或者export PATH="$PATH:/root/.dotnet/tools"

安装dotnet-symbol插件

下载组件的符号文件。方便有效查看堆栈信息

dotnet tool install -g dotnet-symbol

插件安装后,针对要调试的dump文件下载对应的符号,实用程序dotnet-symbol将自动为我们的dump文件下载缺失的pdb文件。

#cd 到一个dump文件所在目录
cd /mydumpfiledire
# 然后执行dotnet-symbol下载runtime或者第三方组件的pdb文件.
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

posted @ 2019-10-23 10:26  czd890  阅读(821)  评论(2编辑  收藏  举报