Docker中如何调试剖析.net core 的程序。
前言
现在.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
docker run -d --privileged -t 包含lldb和dotnetsdk的基镜像
这里要注意的是,容器运行的时候,一定要以特权模式运行,否则执行lldb命令的时候会提示没有权限
如何通过lldb attach到你的程序
调试程序有很多种方式,可以attach,可以抓dump分析等,我这里先举例,如何attach到上面的容器实例
step1:进入到容器中
docker exec -it 容器id /bin/bash
step2:看下当前这个容器实例的端口号
ps aux | grep dotnet | grep -v gr
找到和你程序同名的那一条记录,记录下端口号,比如说AAAA
step3:找到sos插件
find /usr -name libsosplugin.so
记录下sos插件的路径,比如说 /usr/share/dotnet/shared/Microsoft.NETCore.App/2.0.9/libsosplugin.so
step4:进入lldb命令行
lldb-3.6
step5:加载sos插件
plugin load /usr/share/dotnet/shared/Microsoft.NETCore.App/2.0.9/libsosplugin.so
step6:附加到当前进程
process attach -p AAAA
至此,你可以使用sos命令来分析你的程序了,你可以执行soshelp来看下当前libsosplugin插件支持哪些命令,下面附上一些资料,以及调试分析的案例和技巧
ps:注意哈:2.0用3.6; 2.1用3.9; 3.0的我还没试过,,目前项目还是2.1的,等升级了再试试怎么玩。记住哈,版本号一定不能错,错了不能用的。
Docker中如何调试剖析.net core 的程序。的更多相关文章
- 如果在docker中部署tomcat,并且部署java应用程序
1.先说如何在docker中部署tomcat 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7: 第二步:创 ...
- 在 Docker 中手工部署 ASP.NET Core 应用
另一篇:在 Visual Studio 中部署 ASP.NET Core 应用 操作步骤 1. 安装 Docker For Windows(安装之前 Windows 需要开启 Hyper-V 虚拟机 ...
- 在docker中运行ASP.NET Core Web API应用程序
本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...
- docker中运行ASP.NET Core Web API
在docker中运行ASP.NET Core Web API应用程序 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过 ...
- 使用 Docker 在 Linux 上托管 ASP.NET Core 应用程序
说在前面 在阅读本文之前,您必须对 Docker 的中涉及的基本概念以及常见命令有一定了解,本文侧重实战,不会对相关概念详述. 同时请确保您本地开发机器已完成如下安装: Docker 18.06 或更 ...
- Docker容器环境下ASP.NET Core Web API应用程序的调试
本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...
- VS code docker 调试 asp.net core
前言 .net core的诞生就是为了解决跨平台的事情的,所以.net core app运行在linux.macOS.docker上也不是什么新鲜事了. 相信已经有不少.net core的项目已经部署 ...
- ASP.NET Core 3.0 : 二十八. 在Docker中的部署以及docker-compose的使用
本文简要说一下ASP.NET Core 在Docker中部署以及docker-compose的使用 (ASP.NET Core 系列目录). 系统环境为CentOS 8 . 打个广告,求职中.. 一 ...
- 附加进程 到远程服务器中Docker容器内 调试
很多时候,我们在本地开发过程中程序运行很正常,但是发布到线上之后由于环境的原因,可能会有一些异常.通常我们会通过日志来分析问题,除了日志还有一种常用的调试手段就是:附加进程. VS中的附加进程非常强大 ...
随机推荐
- ZooKeeper安装、配置和使用
Zookeeper的概述: ZooKeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. ZooKeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架, ...
- C#WinForm解决跨线程访问控件属性报错
方式一(在程序初始化构造函数中加一行代码): public Form1() { InitializeComponent(); Control.CheckForIllegalCrossThreadCal ...
- Feign整合Ribbon和Hystrix源码解析
在上篇文章Feign自动装配中,我们提到了Feign的自动装配的原理,以及Feign整合Ribbon和Hystrix的核心在类FeignClientFactoryBean中,那么本篇文章就来揭开这个类 ...
- 跳转常规 -- 为什么不要使用404、500等http状态码作为业务代码响应
不要使用HTTP状态码作为业务代码响应 HTTP状态码 是指浏览器访问网址,成功或异常时浏览器或服务器告知用户的代码数字,它指的是网络或服务器的状态,有着不同的含义. 参加MDN.Java Api,常 ...
- 证券secuerity英语secuerity安全
中文名:证券 外文名:security.secuerity 类别:经济权益凭证统称 组成:资本证券.货币证券和商品证券 作用:用来证明持者权益的法律凭证 图集 目录 1 发展历程 ? 世界 ? 中国 ...
- 模仿UIApplication创建单例
UIApplicationMain: 1.创建UIApplication--应用程序唯一标识:可设置状态栏.识别联网状态.设置数字.打电话.发邮件.发短信.打开网页 2.创建UIApplication ...
- SpringBoot+Thyemelaf开发环境正常,打包jar发到服务器就报错Template might not exist or might not be accessible
这里说一下Thyemelaf的巨坑 写了一个SpringBoot+Thyemelaf的项目,并不是前后端分离.今天想放到linux服务器上玩玩,打成jar包,然后一运行他妈居然报错了,报了一个Temp ...
- 第36课 经典问题(下)----关于string的疑问
实例1: 下面的代码输出什么,为什么? #include <iostream> #include <string> using namespace std; int main( ...
- jTopo介绍(一)
jTopo(Javascript Topology library)是一款完全基于HTML5 Canvas的关系.拓扑图形化界面开发工具包.jTopo关注于数据的图形展示,它是面向开发人员的,需要进行 ...
- 药店商品销量分析(python)
一.数据分析的步骤 二.提出问题 分析药店商品销售情况 1)月均消费次数 2)月均消费金额 3)客单价 4)消费趋势 5)热销商品.滞销商品 三.理解数据 销售数据源为excel文件 字段的含义: 共 ...