在Linux-PC上建立kdump调试环境
kdump就是kernel dump的简称,它是从DDR中直接获取的linux内核数据(系统代码/数据)。分析kdump是定位内核panic问题的有效手段之一,同时,通过kdump研究内核数据结构,也是学习和理解linux原理的好方法。本文将介绍如果在PC机上,针对当前运行的linux系统,建立起kdump调试环境。本文基于Ubuntu系统讲解。
1.系统符号表的获取
解析内核dump,首先需要符号表,也就是未经过压缩的内核镜像,通常我们也叫它vmlinux。通常系统默认并没有自带vmlinux,不过我们可以通过安装系统版本对应的debug包来获取它。
网上搜索了一下vmliux的安装方法,大部分文章都说要安装kernel-debug以及kernel-debug-info,不过后来发现这是redhat对应的安装包,需要手动下载rpm包安装。而在ubuntu下,对应的包名是dbgsym,同样需要手动下载deb包安装:
http://ddebs.ubuntu.com/pool/main/l/linux/
这里需要下载和当前内核版本对应的dbgsym包,使用uname -r可查看当前linux内核版本,本文使用的是4.4.0-87-generic版本的内核。下载对应的deb包后,使用“dpkg -I package.deb” 即可安装,安装完成后,如下路径即是vmlinux符号表:
/usr/lib/debug/boot/vmlinux-4.4.0-87-generic
2.Crash调试工具
kernel dump调试工具主要有Trace32和crash两个,trace32是商业软件,图形化界面,功能强大,但是收费。而crash则是开源工具,且基于命令行模式,但是功能并不逊于Trace32,本文选择crash。
安装方法:sudo apt-get install crash
详细的crash用法:
https://www.dedoimedo.com/computers/crash.html
3.直接调试当前运行内核
通常我们会在内核panic的时候,通过某种机制从内存中抓取内核数据,也就是kdump,然后通过trace32或crash工具来分析它。不过在介绍kdump的获取方法之前,我们先看看如何直接调试内存中的内核,也就是说分析对象不是导出来的kdump文件,而是当前的物理内存。其实很简单,crash工具启动时如果不给它传递kdump文件,那么它默认就是调试当前内存中的内核。su root,然后直接在命令行输入:crash vmlinux-4.4.0-87-generic
4.生成kdump文件
很多时候,尤其是定位内核panic问题的时候,我们需要在内核崩溃时,保存DDR中的内核数据到文件,用于事后分析,这就是所谓的kdump文件。
在ubuntu系统中,通过安装linux-crashdump工具,我们可以捕捉kdump。Kdump是一个Linux内核崩溃转储机制,这个机制的原理是在内存中保留一块区域,这块区域用来存放capture kernel,当前的内核发生crash后,通过kexec把保留区域的capture kernel运行起来,由capture kernel负责把crash kernel的完整信息--包括CPU寄存器、堆栈数据等--转储到文件中,文件的存放位置可以是本地磁盘,也可以是网络。具体kdump的使用方法可参考如下链接:http://blog.csdn.net/maokexu123/article/details/40829459
配置完kdump后,我们需要做的就是在当前系统中主动触发一次panic,以获取kdump文件。方法是使用sysrq-trigger节点:
echo c > /proc/sysrq-trigger
在Linux-PC上建立kdump调试环境的更多相关文章
- Linux服务器上搭建web项目环境
一.下载并安装jdk 去官网下载linux系统上jdk的安装包jdk-8u181-linux-x64.tar.gz,在Linux的/usr目录下新建文件夹java,可以使用命令:cd /usr ...
- linux系统上安装svn服务器 环境linux+nginx+svnserver
系统:Ubuntu 12.04 64位 lnmp环境 集成软件:PHP5.4.27.Nginx1.6.0.MySQL5.5.37 阿里云server svnserver有2种执行方式:独立server ...
- Linux下搭建FFmpeg开发调试环境
背景 如果你是一个FFmpeg的使用者,那么绝大部分情况下只需要在你的程序中引用FFmpeg的libav*相关的头文件,然后在编译阶段链接相关的库即可.但是如果你想调试FFmpeg内部相关的逻辑,或者 ...
- Linux 服务器上建立用户并分配权限
查看用户 whoami #要查看当前登录用户的用户名 who am i #表示打开当前伪终端的用户的用户名 who mom likes who 命令其它常用参数 参数 说明 -a 打印能打印的全部 - ...
- 在Linux系统上安装配置ant环境
1.从官网http://ant.apache.org/bindownload.cgi下载tar.gz版ant到本地电脑上 2.通过WinSCP工具将本地电脑上的ant压缩包上传至Linux服务器的/u ...
- 搭建Linux+Jexus+MariaDB+ASP.NET[LJMA]环境
备注:,将我的博客内容整理成册,首先会在博客里优先发布,后续可能的话整理成电子书,主要从linux的最基础内容开始进入Linux的Mono开发方面的话题.本文是我整理博客内容的一篇文章. LJMA 是 ...
- linux pc syncy安装问题
linux pc 上安装syncy遇到的坑 pycurl安装可以指定curl-config,这个是根据自己机器libcurl安装位置确定,不在默认位置时要指定:python setup.py inst ...
- 定时备份windows机器上的文件到linux服务器上的操作梳理(rsync)
由于需要对网络设备做备份,备份文件是放到windows机器上的.现在需要将备份数据同步到linux备份机器上,想到的方案有三种: 1)将windows的备份目录共享出来,然后在linux服务器上进行挂 ...
- 绕过限制,在PC上调试微信手机页面
场景 假设一个手机页面,开发者对其做了限制,导致只能在微信客户端中打开.而众所周知手机上非常不利于调试页面,所以需要能在电脑上打开并进行调试.这里针对常见的三种页面做一下分析,一一绕过其限制,(当然不 ...
随机推荐
- linux下vim对于意外退出的文档的再次开启
转载的: 1.对于同一个文件如果上次已经打开,而未关闭的情况下,又打开该文件进行编辑时,会出现如下提醒: 这是由于已经打开但未闭关的文件,会在其目录下出现一个.swp的文件,由于是属于隐藏文件,可以用 ...
- webservice SOAP WSDL UDDI简介
WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...
- 20165210 Java第四次实验报告
20165210 实验四 Android程序设计 实验步骤 第24章:初识Android 任务一:完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号 学 ...
- js中的函参(arguments)
函参,顾名思义,就是函数的参数,一般我们的js函数这么写: function sum(a,b){ console.log(a+b); } 不难看出,这实现了两个数的相加,比如sum(1,2),打印结果 ...
- 从微软官网下载VS离线安装包的方法
这里描述是包括所有版本,截图以下载VS2017社区版为例: ①登入VS官网下载页面,选择需要的版本点击下载,下载页点此进入. ②下载完成后,打开下载文件所在文件夹,Windows 8.1及以上版本用户 ...
- python 中出现 “IndentationError: expected an indented block” 问题
python 学习 在定义Python函数的时候如下 >>>def hello() . . .print "hello" 这样会报错的,报错如下: Indenta ...
- 项目中使用的ajax代码_:觉得还好
POST>> submitHandler:function(form){ var username = $('#user_name').val(); var password = $('# ...
- cowboy实现websocket
使用cowboy实现websocket主要实现以下回调函数 下面的函数返回值要具体弄清楚原因参考 websocket具体协议 主要就是两个部分 握手和数据传输 -export([init/3]). ...
- ehchache和redis
Ehcache 在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apa ...
- 利用DAC(Data-tier Application)实现数据库结构迁移
从一个存在的库,抽取其表结构,对象,权限等,再部署成一个不包含数据的"空库"的方法有很多种.如自带的Generate Scripts功能,自定义脚本提取创建脚本等. 在实际使用中, ...