dump net core lldb 安装
原文https://www.cnblogs.com/calvinK/p/9263696.html
centos7下安装lldb,dotnet netcore 进程生成转储文件,并使用lldb进行分析
随着netcore应用在linux上部署的应用越来越多,碰到cpu 100%,内存暴涨的情况也一直偶有发生,在windows平台下进程管理器右键转储,下载到本地使用windbg或者直接vs分析都比较方便。而在linux平台下因为一直接触的不深,所以对这一块也一直没有比较好的了解。所以接下来的文章将对在centos7下安装lldb,生成转储以及调试分析进行一些简单说明。
还有就是一般产线的机器也不太会有可以直接调试的机会,所以真出现问题也只能在产线机器dump进程,然后下载到本地来慢慢分析。环境说明:
os:centos7
dotnet :2.1.1。查看官方文档2.0.0只能使用lldb 3.6;2.1以上必须是3.9.0;所以特别要注意版本问题,一个是createdump 2.0的有bug会失败。二个是dotnet版本和lldb版本要匹配
被调试分析的应用也是用2.1跑起来的。
测试目标程序
yum install dotnet-sdk-2.1
dotnet new mvc
vi /mvc.csproj
#netcoreapp2.0 to netcoreapp2.1
#PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" to Version="2.1.1"
dotnet restore
dotnet build
dotnet ./bin/Debug/netcoreapp2.1/mvc.dll
centos7 升级GCC,安装cmake
centos7 升级GCC版本到7.3.0
centos7 安装cmake
centos7下安装lldb调试工具
最开始直接使用给力网友的脚本进行安装(脚本地址查看文章结尾参考资料),后发现3.9.1不能调试分析netcore应用,必须要3.9.0,所以在给力网友的脚本上略作修改后使用。修改后脚本地址https://github.com/czd890/shell/blob/master/llvm_clang_lldb/3.9.0/llvm_clang_install.sh。主要修改几个地方:把lldb,libunwind移动到build_llvm_toolchain中,一次性安装。check_and_download方法中检查本地是否已下载源码包的检查略作修改,只判断指定版本,编译的时候修改为make -j8(我本地机器8核)。
脚本大概思路就是下载如下所表示的组件所有源码,除llvm外的其他组件源代码解压到llvm/tools目录下,这样子源代码就全部准备好
BUILD_TARGET_COMPOMENTS="llvm clang compiler_rt libcxx libcxxabi clang_tools_extra lldb lld libunwind";
接下来就是编译的过程了。
#安装一些必要的依赖组件
yum install libedit-devel libxml2-devel ncurses-devel python-devel swig
#执行根据给力网友的脚本修改后的脚本
当然如果脚本下载速度慢,也是可以自己下载后上传的目录的。具体下载地址查看文章尾部参考资料 llvm,clang,lldb源代码下载地址(3.9.0)
准备源代码差不多就如下图。然后 sh llvm_clang_install.sh开始执行脚本;
默认安装目录在 PREFIX_DIR=/usr/local/llvm-$LLVM_VERSION;。也就是是 /usr/local/llvm-3.9.0;可以在脚本的最开始对此进行修改。
开始执行,又是一段漫长的等待时间,8核并发编译,耗费了估计得有1-2个小时。
刀片机的CPU都跑满了!!!
出去吃完饭后回来,就看到完成拉。具体的path路径可以选择加不加都可以,加的话,直接/etc/profile export PATH=$PATH:llvm-path/bin即可
lldb安装完成,我们的工作就完成一大半拉。
dotnet netcore应用如何生成内存转储文件
/usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.1/createdump 9364

具体命令解释
createdump [options] pid
-f, --name - dump path and file name. The pid can be placed in the name with %d. The default is "/tmp/coredump.%d"
-n, --normal - create minidump (default).
-h, --withheap - create minidump with heap.
-t, --triage - create triage minidump.
-u, --full - create full core dump.
-d, --diag - enable diagnostic messages.
使用lldb调试分析netcore应用内存转储文件
#官方文档上是这样写的。
/usr/local/llvm-3.9.0/bin/lldb -O "settings set target.exec-search-paths /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.1" \
-o "plugin load /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.1/libsosplugin.so" \
--core /opt/dump\_file/mvcdumpmindump /usr/share/dotnet/dotnet
#网友调试参考博客上是这样写的。
/usr/local/llvm-3.9.0/bin/lldb dotnet \ -c /opt/dump\_file/mvcdumpmindump \ -o "plugin load /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.1/libsosplugin.so"
2种写法都是可行的。然后具体的调试分析指令什么的都在coreclr调试说明指导文档有说明。
参考资料:
coreclr调试说明指导文档
https://github.com/dotnet/coreclr/blob/master/Documentation/building/debugging-instructions.md
coreclr生成dmp说明指导文档
https://github.com/dotnet/coreclr/blob/master/Documentation/botr/xplat-minidump-generation.md
llvm,clang,lldb源代码下载地址(3.9.0)
http://releases.llvm.org/download.html#3.9.0
lldb源码安装指导文档
http://lldb.llvm.org/build.html#BuildingLldbOnLinux
llvm源码安装指导文档
http://releases.llvm.org/3.9.0/docs/GettingStarted.html
网友centos7安装llvm,clang,lldb等给力脚本
https://github.com/owent-utils/bash-shell/blob/master/LLVM%26Clang%20Installer/3.9/installer.sh
网友调试参考博客文章
使用SOS调试工具检查应用程序状态
dump net core lldb 安装的更多相关文章
- dump net core windbg 安装
安装 1.下载工具windbg 地址:https://www.microsoft.com/zh-cn/p/windbg-preview/9pgjgd53tn86?SilentAuth=1&rt ...
- dump net core lldb 分析
原文https://www.cnblogs.com/calvinK/p/9274239.html centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试) 写个dem ...
- [.NET Core].NET Core R2安装教程及Hello示例
前言 前几天.NET Core发布了.NET Core 1.0.1 R2 预览版,之前想着有时间尝试下.NET Core.由于各种原因,就没有初试.刚好,前几天看到.NET Core发布新版本了,决定 ...
- BDD实战篇 - 在.NET Core下安装Specflow
这是<如何用ABP框架快速完成项目 >系列中的一篇文章. BDD很赞!比TDD先进很多,能够大大提高编码效率. 让我们动手起来吧!先在.NET Core下安装Specflow! 官网教程在 ...
- ExpandoObject与DynamicObject的使用 RabbitMQ与.net core(一)安装 RabbitMQ与.net core(二)Producer与Exchange ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler) .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
ExpandoObject与DynamicObject的使用 using ImpromptuInterface; using System; using System.Dynamic; names ...
- NetCore入门篇:(一)Net Core环境安装
一.下载Visual Studio 2017 1.下载地址:https://www.visualstudio.com/zh-hans/downloads/ 2.选择要下载的版本 二.安装Net Cor ...
- .NET Core R2安装及示例教程
.NET Core R2安装及示例教程 Install for Windows - Visual Studio 2015 1 Download Visual Studio 2015 Make sure ...
- 在 Asp.Net Core 中安装 MVC
在 ASP.NET Core 中安装 MVC 到目前为止,我们在本系列视频中使用的 ASP.NET Core 项目是使用“空”项目模板生成的.目前这个项目没有设置和安装 MVC. 两个步骤学会在 AS ...
- .NET Core 代码安装服务启动
最近做了一些.NET Core的程序,有在Windows下运行的 有在CentOS 下运行的,Windows下运行的还好,对Windows下还算比较熟悉了,但CentOS 下 每次都是找笔记支持命令 ...
随机推荐
- Flink入门介绍
什么是Flink Apache Flink是一个分布式大数据处理引擎,可以对有限数据流和无限数据流进行有状态计算.可部署在各种集群环境,对各种大小的数据规模进行快速计算. Flink特性 支持高吞吐. ...
- 【转】linux sed命令
转自:linux sed命令就是这么简单 参考:Linux三大剑客之sed:https://blog.csdn.net/solaraceboy/article/details/79272344 阅读目 ...
- Java编程思想之二 一切都是对象
2.1 用引用操作对象 每种编程语言都有自己的操作内存中元素的方式. 在Java中,一切都可以视为对象,因此可以采用单一的固定语法. 2.2 必须由你创建所有对象 一旦创建一个引用,就希望它能与一个新 ...
- Linux平台Boost 1.6.7的编译方法
boost库下载地址:https://dl.bintray.com/boostorg/release/ 编译: 1. 获得bjam (1) # cd /usr/src/boost_1_67_0 (2) ...
- 浅析String.intern()方法
1.String类型“==”比较样例代码如下:package com.luna.test;public class StringTest { public static void main(Strin ...
- openssl 自己制作ssl证书:自己签发免费ssl证书,为nginx生成自签名ssl证书
server { listen 80; listen 443 ssl; server_name ~^((cloud)|(demo-cloud)|(demo2-cloud)|(approval1))(( ...
- java多线程(五)线程通讯
1.1. 为什么要线程通信 多个线程并发执行时,在默认情况下CPU是随机切换线程的,有时我们希望CPU按我们的规律执行线程,此时就需要线程之间协调通信. 1.2. 线程通讯方式 线程间通信常用方式如下 ...
- Ubuntu下配置Window CIFS共享
转自:https://blog.csdn.net/wanfengzhong/article/details/52550074 1. 准备windows共享文件夹 2. 安装 cifs-utilssud ...
- Starting Jenkins bash: /usr/bin/java: 没有那个文件或目录
[root@localhost /]# systemctl status jenkins.service ● jenkins.service - LSB: Jenkins Automation Ser ...
- DLL注入实践
Windows系统大量使用dll作为组件复用,应用程序也会通过dll实现功能模块的拆分.DLL注入技术是向一个正在运行的进程插入自有DLL的过程. Window下的代码注入 常见的Windows代码注 ...