新闻动态
当前位置:首页 > 新闻动态

Linux工具系列: Linux内核崩溃分析工具Crash-Utility

2025-06-25

【Linux工具系列】专栏是为开发者提供Linux工具在内存管理、调度优化、CPU等方面的优质清单。本期是带来Crash-Utility工具,通过对基础概念和使用方法的介绍和分享,让您全方位了解Crash-Utility的特性及使用场景。

1 什么是Crash-Utility?

Crash-Utility是一个开源工具,专门用于分析和调试Linux内核崩溃时生成的coredump文件(通常称为vmcore)。当Linux内核发生严重错误(如panic或oops)时,系统会生成一个内核转储文件,记录崩溃时的内存状态、寄存器信息、堆栈信息等。Crash-Utility可以帮助开发者通过这些转储文件,快速定位内核崩溃的原因。

2 基本使用

1. 安装Crash-Utility

集成GDB功能是从8.0.6版本开始支持的,因此选择编译源码包进行安装:

编译安装方法:

gitclone
cdcrash
make
sudomakeinstall

2. 典型使用步骤

1)系统安装kdump服务,用于在内核崩溃时产生vmcore:

yuminstallkexec-tools
systemctlrestartkdump

2) 安装内核debug包

yuminstallkernel-debuginfo

3)加载转储文件

crash/usr/lib/debug/lib/modules/$(uname-r)/vmlinux/var/crash/<vmcore-file>

3. Crash-Utility使用实例

使用echo c > /proc/sysrq-trigger模拟系统崩溃,产生vmcore

加载转储文件:

crash /usr/lib/debug/lib/modules/5.10.134-15.2.15.kos5.x86_64/vmlinux\

/var/crash/127.0.0.1-2024-12-06-14\:30\:47/vmcore

具体显示如下:

1.png

切换进程上下文

命令:set #pid

切换进程上下文,命令后面跟进程PID号,并且可以通过task子命令加上TASK地址进程查看当前任务相关信息:

2.png

查看堆栈信息

命令:gdb bt

通过crash调试vmcore时,打印堆栈信息:执行命令bt,打印如下:

3.png

通过crash-utility进行调试时,打印堆栈信息:执行命令:gdb bt

4.png

可以看出两者打印会有一些不同,以gdb模式更能够清楚的表示出当前堆栈信息,能够更加清晰的指示出当前出问题的代码位置,就像调试用户态程序一样,不再需要通过反汇编等复杂的手段定位问题位置。

切换栈帧

命令:gdb frame#framenum

切换到指定栈帧,命令后面跟栈帧号。切换到具体的栈帧后可以通过gdb命令进行代码调试,比如使用命令"l"查看当前代码。

5.png

查看局部变量

命令:gdb info locals

在调试时避免不了要查看某个函数的局部变量值是多少,通过命令gdb info locals会打印当前栈帧时的一些局部变量值。

6.png

查看函数参数值

命令:gdb info args

查看函数参数,执行gdb info args会打印当前栈帧时函数的参数值。

7.png

查看栈帧信息

命令:gdb info frame

8.png

栈帧滚动

命令:gdb up/down

栈帧滚动:上一帧/下一帧

9.png

切换GDB模式

命令:set gdb on/off

开启gdb模式/关闭gdb模式,开启gdb模式的情况下可以使用gdb的一些命令,像调试用户态程序一样调试内核,进入gdb模式后调试窗口是gdb>开头的;

比如查看堆栈:输入bt,同普通模式下使用gdb bt效果一样:

10.png

动态加载内核模块

命令:mod

通过help mod命令可以显示mod的具体用法以及示例;

比如显示内核模块加载信息:mod -S

加载内核模块:mod -s模块名称,注意,如果不指定内核模块搜索路径,默认是从/usr/lib/debug/lib/modules/下搜索模块,如果想从指定路径下加载模块可以通过“mod -s模块名称 路径”

11.png

查看内核数据结构或符号定义的子命令

命令:whatis

用于查看内核数据结构或符号定义的子命令,可通过help whatis查看具体子命令用法。比如查看regs变量类型:whatis regs

12.png

4. 基本命令汇总

1.jpg

3 特性及应用场景分析

支持多种转储文件格式:

Crash-utility支持多种工具生成的转存文件格式,包括:

Kdump:Linux内核自带的崩溃转储工具。

LKCD(Linux Kernel Crash Dump):一种早期的内核转储工具。

netdump和diskdump:通过网络或磁盘生成的内核转储文件。

这意味着它不仅可以分析虚拟机上生成的内核转存文件,还可以分析物理机或其他设备上生成的文件。

与GDB集成:

Crash-utility与GDB(GNU调试器)进行了集成,能够利用GDB的强大调试功能来分析内核转储文件。通过GDB集成,开发者可以像调试用户态程序一样调试内核,查看堆栈、局部变量、函数参数等信息。

广泛的应用场景:

Crash-utility不仅限于分析内核崩溃问题。它还可以用于调试运行时系统、分析内核性能问题、查找内核中的漏洞等。因此,Crash-utility在多种场景下都具有广泛的应用价值。

关注我们

Copyright © 2024 浪潮信息 鲁ICP备13028953号-12

售前咨询

售后服务

回到顶部

回到顶部

售前咨询
售后服务