crash

简介

Analyze Linux crash dump data or a live system

如何安装 crash?

安装本机架构(如:x86)crash,直接通过 $ sudo apt install crash 安装即可。

安装非本机架构(如:arm64)crash,下载 crash 仓库源码arrow-up-right, 执行 $ make target=ARM64 编译源码,即可生成 arm64 crash 可执行文件。

如何生成 vmcore?

  • 在 Linux Kernel Panic 时自动生成 vmcore,不需要任何操作

  • 在用户空间手动触发生成 vmcore

$ echo c > /proc/sysrq-trigger
  • 通过 QEMU 手动触发生成 vmcore

## 启动 QEMU 后,按 Ctrl A+C 进入 QEMU monitor
(qemu) dump-guest-memory -p vmcore

如何使用 crash?

$ crash vmlinux vmcore
  • vmlinux 是在编译 Linux Kernel 后生成。

  • vmcore 是通过 netdump, diskdump, LKCD kdump, xendump kvmdump or VMware 生成。

如果调试在线系统,直接执行 $ crash vmlinux 即可。

crash 调试命令

技巧

通过 log 查找 linux kernel panic 现场的第一行能够知道简单 panic 原因,再通过 ESR 知道更加详细的 panic 原因。

通过 log 查找 linux kernel panic pc 指针,使用 dis pc_address 显示 address 对应的汇编指令,其汇编指令对应的寄存器值都可以通过 log 的 linux kernel panic 现场得到,到这里就能够理解此指令 panic 的真正原因。再通过 dis -r pc_address 显示从函数开头到 address 的汇编指令,向上跟踪不正常寄存器值的源头。

通过 log 查找 sp 指针,使用 rd sp_address count 显示 stack 内容,从而推导 得到函数调用关系、每一个函数的参数/局部变量等。(需要熟悉 x86_64/arm64 的汇编指令、 函数进出栈原理)

Last updated