在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上调试微信手机页面
场景 假设一个手机页面,开发者对其做了限制,导致只能在微信客户端中打开.而众所周知手机上非常不利于调试页面,所以需要能在电脑上打开并进行调试.这里针对常见的三种页面做一下分析,一一绕过其限制,(当然不 ...
随机推荐
- LeetCode OJ:Happy Number(欢乐数)
Write an algorithm to determine if a number is "happy". A happy number is a number defined ...
- 查bug受气了,反思
昨天改bug了一天,上午出现bug的原因是Boolean和boolean使用BeanUtils等工具无法自动赋值.我们写的时候注意大小写. 下午查了一个下午没有找到任何原因. 但是我受了气,因为报错点 ...
- react:reducer-creator
function createReducer(initialState, handlers) { return function reducer(state = initialState, actio ...
- JS 页面加载触发事件 document.ready和onload的区别
document.ready和onload的区别——JavaScript文档加载完成事件页面加载完成有两种事件: 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件): 二是onlo ...
- tf随笔-6
import tensorflow as tfx=tf.constant([-0.2,0.5,43.98,-23.1,26.58])y=tf.clip_by_value(x,1e-10,1.0)ses ...
- 原生js面向对象写法
Mouse就是一个类,有自己的成员变量和成员方法,成员方法一定加上prototype,避免js原型的坑. var Mouse = function(id) { this.id = id; this.n ...
- UITextField的使用总结
初始化一个文字框: UITextField * textField = [[UITextField alloc]initWithFrame:CGRectMake(, , , )]; 设置和获取文字框文 ...
- LeetCode Valid Parenthesis String
原题链接在这里:https://leetcode.com/problems/valid-parenthesis-string/description/ 题目: Given a string conta ...
- 【HDU】4632 Palindrome subsequence(回文子串的个数)
思路:设dp[i][j] 为i到j内回文子串的个数.先枚举所有字符串区间.再依据容斥原理. 那么状态转移方程为 dp[i][j] = dp[i][j-1] + dp[i+1][j] - dp[i+ ...
- Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 ...