Linux内核调试:kdump、vmcore、crash、kernel-debuginfo

本文介绍如何在Linux系统中使用kdump生成内核崩溃转储文件vmcore,并利用crash工具进行详细分析,包括kdump、crash及kernel-debuginfo的安装配置流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

      linux内核发送崩溃时,kdump会生成一个内核转储文件vmcore。 可以通过分析vmcore分析出内核崩溃的原因。 

      crash是一个被广泛应用的内核奔溃转储文件分析工具。

      使用crash调试内核转储文件,需要安装crash工具和内核调试工具kernel-debuginfo。

二、安装kudmp、crash、kernel-debuginfo

      安装包的版本,要与linux内核一致,查看linux内核版本:

      uname -a

      

2.1 安装、配置、启动kdump

      安装kdump:

            yum search kexec-tools
            yum install kexec-tools.x86_64

      配置kdump:

            vim  /boot/grub/menu.lst:  设置crashkernel=auto

            vim /etc/kdump.conf:          path /var/crash    (core文件产生的目录)

      启动kdump:

            service kdump start

2.2 安装crash 

      文件名:crash-6.1.0-5.el6.x86_64.rpm

          安装:yum search crash

                      yum install  crash.x86_64

2.3 安装kernel-debuginfo

        文件名:kernel-debuginfo-common-x86_64-2.6.32-220.el6.x86_64.rpm

                        kernel-debuginfo-2.6.32-220.el6.x86_64.rpm

     下载地址:http://debuginfo.centos.org/6/x86_64/

            安装:rpm -ivh kernel-debuginfo-common-x86_64-2.6.32-220.el6.x86_64.rpm

                        rpm -ivh kernel-debuginfo-2.6.32-220.el6.x86_64.rpm

三、分析vmcore

3.1 模拟机内内核奔溃

      echo  c  >  /proc/sysrq-trigger

      执行此命令内核崩溃,会在/var/crash目录下生成vmcore文件。(vim /etc/kdump.conf; path /var/crash)

3.2 分析vmcore

      进入目录/var/crash/127.0.0.1-2014-02-24-09:30:19,可以看到vmcore文件。

     1.  执行/usr/bin/crash  /usr/lib/debug/lib/modules/2.6.32-220.el6.x86_64/vmlinux  vmcore

      2. 具体分析过程见:http://blog.youkuaiyun.com/guowenyan001/article/details/12975221


参考资料:

      深入探索kdump、crash:http://www.ibm.com/developerworks/cn/linux/l-cn-kdump4/index.html?ca=drs

      crash调试vmcore:http://blog.youkuaiyun.com/taget/article/details/7814740


<think>好的,用户想知道如何使用GDB调试内核kdump。首先,我需要回忆一下kdump的基本概念和工作流程。根据引用[4],Kdump是在系统崩溃时启动第二个内核(捕获内核)来收集生产内核的内存转储,生成/proc/vmcore文件。而用户的问题是如何用GDB调试这个过程。 首先,我应该考虑用户可能需要的前提条件,比如是否已经配置好kdump,生成了vmcore文件。然后,调试步骤可能包括加载vmcore到GDB,使用crash工具辅助分析,以及可能的ftrace结合。引用[3]提到crash可以查看ftrace,这可能是一个相关点。 接下来,需要分解步骤。首先是如何安装必要的工具,比如crashkernel-debuginfo。然后,用GDB加载vmcore,但可能需要注意GDB本身对内核调试的支持有限,所以需要结合crash工具。引用[3]中的crash安装和调试方法可能适用。 另外,用户可能遇到常见问题,比如符号文件缺失,这时候需要安装debuginfo包,如引用[3]提到的。还有可能涉及分析内核崩溃的原因,比如模块问题,需要加载模块的符号。 最后,需要验证步骤是否正确,比如运行GDB命令后能否查看寄存器、堆栈等。同时,提醒用户可能需要使用crash工具的高级功能,如`bt`查看堆栈,`log`查看内核日志,如引用[4]中提到的分析流程。 总结回答结构:先介绍前提条件,然后分步骤说明如何用GDB和crash分析vmcore,接着常见问题处理,最后注意事项。确保引用相关文献,比如引用[3]和[4]中的crashkdump流程。</think>### 如何使用GDB调试内核kdump? #### 前提条件 1. **已配置kdump并生成vmcore文件** 确保系统已启用kdump机制,并在崩溃后生成内存转储文件`/proc/vmcore`或转储到指定路径(通过`/etc/kdump.conf`配置)[^2][^4]。 2. **安装调试工具和符号文件** - 安装`crash`工具和`gdb`:用于分析内核转储文件。 - 安装对应内核版本的调试符号包(如`kernel-debuginfo`),否则无法解析内核符号[^3]。 --- #### 调试步骤 ##### 1. **使用GDB直接加载vmcore** ```bash gdb /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /path/to/vmcore ``` - **说明**: - `vmlinux`是包含调试符号的内核镜像,需通过`kernel-debuginfo`包获取。 - GDB会加载崩溃时的寄存器状态和内存快照,可通过`bt`查看崩溃时的调用栈[^3]。 ##### 2. **使用crash工具增强分析** ```bash crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /path/to/vmcore ``` - **常用命令**: - `bt`:显示崩溃时的内核堆栈。 - `log`:查看内核日志,定位崩溃原因。 - `ps`:显示崩溃时的进程状态。 - `struct <结构体名> <地址>`:查看内核数据结构内容。 ##### 3. **结合ftrace分析性能问题** - 若崩溃与内核性能或死锁相关,可通过`crash`扩展命令查看ftrace日志: ```bash crash> trace ``` - 需确保生产内核已启用ftrace功能。 --- #### 常见问题处理 1. **符号文件缺失** 若GDB提示`No symbol table is loaded`,需安装对应内核版本的`kernel-debuginfo`包。 2. **模块未加载符号** 若崩溃由内核模块引起,需手动加载模块符号: ```bash crash> mod -s <模块名> /path/to/module.ko ``` --- #### 注意事项 - **vmcore完整性**:确保转储文件未被截断,可通过`file /path/to/vmcore`验证是否为`ELF core`文件。 - **多核分析**:使用`crash`的`set`命令切换CPU上下文,分析多核环境下的崩溃原因。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值