前言

  现在.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插件支持哪些命令,下面附上一些资料,以及调试分析的案例和技巧

sos微软官方命令介绍

通过lldb分析内存案例

案例2

微软github官方文档Debugging CoreCLR

ps:注意哈:2.0用3.6; 2.1用3.9; 3.0的我还没试过,,目前项目还是2.1的,等升级了再试试怎么玩。记住哈,版本号一定不能错,错了不能用的。

Docker中如何调试剖析.net core 的程序。的更多相关文章

  1. 如果在docker中部署tomcat,并且部署java应用程序

    1.先说如何在docker中部署tomcat 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7: 第二步:创 ...

  2. 在 Docker 中手工部署 ASP.NET Core 应用

    另一篇:在 Visual Studio 中部署 ASP.NET Core 应用  操作步骤 1. 安装 Docker For Windows(安装之前 Windows 需要开启 Hyper-V 虚拟机 ...

  3. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  4. docker中运行ASP.NET Core Web API

    在docker中运行ASP.NET Core Web API应用程序 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过 ...

  5. 使用 Docker 在 Linux 上托管 ASP.NET Core 应用程序

    说在前面 在阅读本文之前,您必须对 Docker 的中涉及的基本概念以及常见命令有一定了解,本文侧重实战,不会对相关概念详述. 同时请确保您本地开发机器已完成如下安装: Docker 18.06 或更 ...

  6. Docker容器环境下ASP.NET Core Web API应用程序的调试

    本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...

  7. VS code docker 调试 asp.net core

    前言 .net core的诞生就是为了解决跨平台的事情的,所以.net core app运行在linux.macOS.docker上也不是什么新鲜事了. 相信已经有不少.net core的项目已经部署 ...

  8. ASP.NET Core 3.0 : 二十八. 在Docker中的部署以及docker-compose的使用

    本文简要说一下ASP.NET Core 在Docker中部署以及docker-compose的使用  (ASP.NET Core 系列目录). 系统环境为CentOS 8 . 打个广告,求职中.. 一 ...

  9. 附加进程 到远程服务器中Docker容器内 调试

    很多时候,我们在本地开发过程中程序运行很正常,但是发布到线上之后由于环境的原因,可能会有一些异常.通常我们会通过日志来分析问题,除了日志还有一种常用的调试手段就是:附加进程. VS中的附加进程非常强大 ...

随机推荐

  1. ZooKeeper安装、配置和使用

    Zookeeper的概述: ZooKeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. ZooKeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架, ...

  2. C#WinForm解决跨线程访问控件属性报错

    方式一(在程序初始化构造函数中加一行代码): public Form1() { InitializeComponent(); Control.CheckForIllegalCrossThreadCal ...

  3. Feign整合Ribbon和Hystrix源码解析

    在上篇文章Feign自动装配中,我们提到了Feign的自动装配的原理,以及Feign整合Ribbon和Hystrix的核心在类FeignClientFactoryBean中,那么本篇文章就来揭开这个类 ...

  4. 跳转常规 -- 为什么不要使用404、500等http状态码作为业务代码响应

    不要使用HTTP状态码作为业务代码响应 HTTP状态码 是指浏览器访问网址,成功或异常时浏览器或服务器告知用户的代码数字,它指的是网络或服务器的状态,有着不同的含义. 参加MDN.Java Api,常 ...

  5. 证券secuerity英语secuerity安全

    中文名:证券 外文名:security.secuerity 类别:经济权益凭证统称 组成:资本证券.货币证券和商品证券 作用:用来证明持者权益的法律凭证 图集 目录 1 发展历程 ? 世界 ? 中国 ...

  6. 模仿UIApplication创建单例

    UIApplicationMain: 1.创建UIApplication--应用程序唯一标识:可设置状态栏.识别联网状态.设置数字.打电话.发邮件.发短信.打开网页 2.创建UIApplication ...

  7. SpringBoot+Thyemelaf开发环境正常,打包jar发到服务器就报错Template might not exist or might not be accessible

    这里说一下Thyemelaf的巨坑 写了一个SpringBoot+Thyemelaf的项目,并不是前后端分离.今天想放到linux服务器上玩玩,打成jar包,然后一运行他妈居然报错了,报了一个Temp ...

  8. 第36课 经典问题(下)----关于string的疑问

    实例1: 下面的代码输出什么,为什么? #include <iostream> #include <string> using namespace std; int main( ...

  9. jTopo介绍(一)

    jTopo(Javascript Topology library)是一款完全基于HTML5 Canvas的关系.拓扑图形化界面开发工具包.jTopo关注于数据的图形展示,它是面向开发人员的,需要进行 ...

  10. 药店商品销量分析(python)

    一.数据分析的步骤 二.提出问题 分析药店商品销售情况 1)月均消费次数 2)月均消费金额 3)客单价 4)消费趋势 5)热销商品.滞销商品 三.理解数据 销售数据源为excel文件 字段的含义: 共 ...