在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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?