一、Crash?
当linux系统内核发生崩溃的时候,可以通过KEXEC+KDUMP等方式收集内核崩溃之前的内存,生成一个转储elf文件vmcore或者其他dump形式。内核开发者通过分析该elf dump文件就可以诊断出内核崩溃的原因,从而进行操作系统的代码问题修复。那么Crash就是一个被广泛使用内核崩溃转储文件分析工具。
对调试来讲,gdb/trace32是非常适合的,但gdb始终是调试native的工具,不支持kernel信息显示,比如task信息之类的。crash补足了这个短板,由Dave Anderson开发和维护的一个内存转储分析工具,是基于GDB开发的,GDB适用于用户进程的coredump,而Crash扩展了GDB,使其适用于linux kernel coredump,目前它的最新版本是7.3。在没有统一标准的内存转储文件的格式的情况下,Crash工具支持众多的内存转储文件格式,包括:
- Live linux系统
- kdump产生的正常的和压缩的内存转储文件
- 由makedumpfile命令生成的压缩的内存转储文件
- 由Netdump生成的内存转储文件
- 由Diskdump生成的内存转储文件
- 由Kdump生成的Xen的内存转储文件
- IBM的390/390x的内存转储文件
- LKCD生成的内存转储文件
- Mcore生成的内存转储文件
二、安装
crash是redhat开源工具,因此需要自己下载代码编译成linux可执行文件。
1)从官方网站下载crash源代码;
git clone git://github.com/crash-utility/crash.git
2)编译前确保必要的组件(ncurese和zlib);
sudo apt-get install libncurses5-dev
sudo apt-get install zlib1g-dev
3)解压后编译ARM 32bit的crash:
cd crash-7.2.8
make target=ARM64
4)如果是ARM 64bit的,则是:
cd crash-7.2.8
make target=ARM64
5)编译后会在当前目录下生成crash,可以将多余的符号去除:
strip -s crash
6)当发生kernel crash时,会有db生成;
7)然后可以使用crash的各种命令了,详情请看:http://people.redhat.com/anderson/crash_whitepaper/