Linux Crash分析入门(一):kexec+kdump+crash简介
Linux Crash分析入门(二):启动kdump
Linux Crash分析入门(三):crash命令
Linux Crash分析入门(四):案例分析
启动Crash
在 Linux Crash分析入门(二):启动kdump 里提到,用crash工具分析kdump生成的dump.xxx文件的命令是sudo crash vmlinx-xxx dump.xxx
,系统会进入 crash>
交互式命令行界面。
常用命令
在crash>
命令行输入help
命令,可以查看所有可使用的命令:
crash> help
* extend log rd task
alias files mach repeat timer
ascii foreach mod runq tree
bpf fuser mount search union
bt gdb net set vm
btop help p sig vtop
dev ipcs ps struct waitq
dis irq pte swap whatis
eval kmem ptob sym wr
exit list ptov sys q
较常用的命令有bt, dis, struct, mod, gdb, log, kmem, exit/q
等。
bt
bt
- backtrace
,即调用栈回溯
或堆栈回溯
,用来获取崩溃点的调用栈上所有活动函数的调用序列,以及崩溃点处于哪个函数的多少偏移量。本质上就是回答了“当前崩溃点事通过怎样的一系列函数调用、在哪个位置崩溃的?”。
输入命令help bt
可以查看bt命令相关的用法。
bt:直接查看崩溃点
bt -a: 每个 CPU 上的调用栈
bt -c 6:查看 CPU 6 上的调用栈
/**
* Display a kernel stack backtrace.
* If no arguments are given, the stack trace
* of the current context will be displayed.
*/
crash> bt
PID: 40743 TASK: ffff9675577dca40 CPU: 6 COMMAND: "modprobe"
#0 [ffffae284c607850] machine_kexec at ffffffffba685e40
#1 [ffffae284c6078b0] __crash_kexec at ffffffffba78cc22
#2 [ffffae284c607980] crash_kexec at ffffffffba78e3a8
#3 [ffffae284c607990] oops_end at ffffffffba63fa06
#4 [ffffae284c6079b8] page_fault_oops at ffffffffba697a0e
#5 [ffffae284c607a18] do_user_addr_fault at ffffffffba6981c9
#6 [ffffae284c607a70] exc_page_fault at ffffffffbb348ec7
#7 [ffffae284c607aa0] asm_exc_page_fault at ffffffffbb400ace
[exception RIP: mydrv_deinit+374] // 在函数 mydrv_deinit+374 地址的位置发生崩溃
RIP: ffffffffc0ffa196 RSP: ffffae284c607b50 RFLAGS: 00010246
RAX: 0000000000000039 RBX: 0000000000000000 RCX: 0000000000000027
RDX: ffffae28403cf000 RSI: 0000000000000001 RDI: ffff967c5f5a0980
RBP: ffffae284c607be8 R8: 0000000000000003 R9: fffffffffffdcba0
R10: 0000000000ffff10 R11: 000000000000000f R12: 0000000000000004
R13: ffff96759054ac00 R14: ffff96756a41b9e8 R15: ffff96755ebeec00
ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018
#8 [ffffae284c607bf0] xxxxxxxxxxx at ffffffffc0fda522 [mygpu]
#9 [ffffae284c607c00] xxxxxxxxxxxxxxxxx at ffffffffc1188405 [mygpu]
#10 [ffffae284c607c40] xxxxxxxxxxxxxxx at ffffffffc1188974 [mygpu]
#11 [ffffae284c607c68] xxxxxxxxxxxxxxxxxxxx at ffffffffc11877e0 [mygpu]
#12 [ffffae284c607c90] component_unbind at ffffffffbae31cab
#13 [ffffae284c607cc0] component_unbind_all at ffffffffbae31d86
#14 [ffffae284c607cf8] mygpu_component_unbind at ffffffffc0f8b60e [mygpu]
#15 [ffffae284c607d18] take_down_master at ffffffffbae31ef2
#16 [ffffae284c607d38] component_del at ffffffffbae325bf
#17 [ffffae284c607d60] vpu_remove at ffffffffc0f947f9 [mygpu]
#18 [ffffae284c607d70] platform_remove at ffffffffbae3d741
#19 [ffffae284c607d88] __device_release_driver at ffffffffbae3aa14
#20 [ffffae284c607dc0] driver_detach at ffffffffbae3bf33
#21 [ffffae284c607df0] bus_remove_driver at ffffffffbae3a03c
#22 [ffffae284c607e10] driver_unregister at ffffffffbae3c5d1
#23 [ffffae284c607e28] platform_unregister_drivers at ffffffffbae