建立邮箱,台大教授独特演讲视频,蓟县haobc
现在.net core跨平台了,相信大部分人都把core的程序部署在了linux环境中,或者部署在了docker容器中,与之对应的,之前都是部署在windows环境中,在win中,我们可以用windbg来调试。但是在linux环境下
我们可以采用lldb(这只是一种,还有其他方式)
linux+docker+core2.0
为了方便使用lldb,我们最好把他做成镜像(lldb+dotnet sdk),这样我们的程序可以以这个制作好的镜像作为基镜像来使用。
dockerfile如下:
# 使用2.0的sdk镜像 from microsoft/dotnet:2.0-sdk run apt-get update # 微软提供的默认镜像只能通过apt-get来安装所需要的包,而且还是没有update过的 # 安装apt-utils:是为了使用wget命令 # 安装gdb:是为了抓取指定dotnet进程的dump文件 run apt-get update && apt-get install -y apt-utils gdb procps # 安装lldb,因为.netcore的版本是2.0,所以对应的lldb版本为3.6(如果是2.1的话,就是3.9,注意下面2处数字处,就是要替换的地方) run echo "deb http://llvm.org/apt/trusty/ llvm-toolchain-trusty-3.6 main" | tee /etc/apt/sources.list.d/llvm.list run wget -o - http://llvm.org/apt/llvm-snapshot.gpg.key | apt-key add - run apt-get update run apt-get install lldb-3.6 -y
docker run -d --privileged -t 包含lldb和dotnetsdk的基镜像
这里要注意的是,容器运行的时候,一定要以特权模式运行,否则执行lldb命令的时候会提示没有权限
调试程序有很多种方式,可以attach,可以抓dump分析等,我这里先举例,如何attach到上面的容器实例
docker exec -it 容器id /bin/bash
ps aux | grep dotnet | grep -v gr
找到和你程序同名的那一条记录,记录下端口号,比如说aaaa
find /usr -name libsosplugin.so
记录下sos插件的路径,比如说 /usr/share/dotnet/shared/microsoft.netcore.app/2.0.9/libsosplugin.so
lldb-3.6
plugin load /usr/share/dotnet/shared/microsoft.netcore.app/2.0.9/libsosplugin.so
process attach -p aaaa
至此,你可以使用sos命令来分析你的程序了,你可以执行soshelp来看下当前libsosplugin插件支持哪些命令,下面附上一些资料,以及调试分析的案例和技巧
ps:注意哈:2.0用3.6; 2.1用3.9; 3.0的我还没试过,,目前项目还是2.1的,等升级了再试试怎么玩。记住哈,版本号一定不能错,错了不能用的。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
asp.net搭建博客,使用BlogEngine.NET+MySql搭建博客
网友评论