题记:对于内核开发人员,crash 已经成为必不可少的一个工具。内核固然高深,但是通过 kdump 和 crash 这对战友的亲密配合,很多问题都会迎刃而解。本文仅介绍了 crash 的基本知识,更多的技巧还需要读者在实践中不断探索和总结。
当系统崩溃时,通过kdump可以获得当时的内存转储文件vmcore,但是该如何分析vmcore呢?
crash是一个用于分析内核转储文件的工具,一般和kdump搭配使用。
使用crash时,要求调试内核vmlinux在编译时带有-g选项,即带有调试信息。
如果没有指定vmcore,则默认使用实时系统的内存来分析。
值得一提的是,crash也可以用来分析实时的系统内存,是一个很强大的调试工具。
crash使用gdb作为内部引擎,语法类似于gdb,命令的使用说明可以用 help来查看。
使用crash需要安装crash工具包和内核调试信息包:
crash
kernel-debuginfo-common
kernel-debuginfo
crash使用
Analyze Linux crash dump data or a live system.
crash [OPTION] NAMELIST MEMORY-IMAGE (dumpfile form)
crash [OPTION] [NAMELIST] (live system form)
使用crash来调试vmcore,至少需要两个参数:
NAMELIST:未压缩的内核映像文件vmlinux,默认位于/usr/lib/debug/lib/modules/$(uname -r)/vmlinux,由
内核调试信息包提供。
MEMORY-IMAGE:内存转储文件vmcore,默认位于/var/crash/%HOST-%DATE/vmcore,由kdump生成。
例如:# crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/%HOST-%DATE/vmcore
(1) 错误类型
首先可以在vmcore-dmesg.txt中先查看错误类型,如