问题描述
考虑以下 Linux 内核转储堆栈跟踪,您可以通过调用 panic(debugging a Linux kernel panic");
:
Consider the following Linux kernel dump stack trace, you can trigger a panic from the kernel source code by calling panic("debugging a Linux kernel panic");
:
[<001360ac>] (unwind_backtrace+0x0/0xf8) from [<00147b7c>] (warn_slowpath_common+0x50/0x60)
[<00147b7c>] (warn_slowpath_common+0x50/0x60) from [<00147c40>] (warn_slowpath_null+0x1c/0x24)
[<00147c40>] (warn_slowpath_null+0x1c/0x24) from [<0014de44>] (local_bh_enable_ip+0xa0/0xac)
[<0014de44>] (local_bh_enable_ip+0xa0/0xac) from [<0019594c>] (bdi_register+0xec/0x150)
- 在
unwind_backtrace+0x0/0xf8
中+0x0/0xf8
代表什么? - 如何查看
unwind_backtrace+0x0/0xf8
的C代码? - 如何解读恐慌的内容?
- In
unwind_backtrace+0x0/0xf8
what does+0x0/0xf8
stand for? - How can I see the C code of
unwind_backtrace+0x0/0xf8
? - How to interpret the panic's content?
推荐答案
这只是一个普通的回溯,那些函数是按照相反的顺序调用的(第一个被前一个调用,依此类推):
It's just an ordinary backtrace, those functions are called in reverse order (first one called was called by the previous one and so on):
unwind_backtrace+0x0/0xf8
warn_slowpath_common+0x50/0x60
warn_slowpath_null+0x1c/0x24
ocal_bh_enable_ip+0xa0/0xac
bdi_register+0xec/0x150
bdi_register+0xec/0x150
是符号 + 偏移量/长度,了解内核 Oops 以及如何调试内核 oops.还有关于调试内核
The bdi_register+0xec/0x150
is the symbol + the offset/length there's more information about that in Understanding a Kernel Oops and how you can debug a kernel oops. Also there's this excellent tutorial on Debugging the Kernel
注意:按照 Eugene 在下面的建议,您可能想先尝试 addr2line,它仍然需要一个带有调试符号的图像,例如
Note: as suggested below by Eugene, you may want to try addr2line first, it still needs an image with debugging symbols though, for example
addr2line -e vmlinux_with_debug_info 0019594c(+offset)
这篇关于如何阅读、理解、分析和调试 Linux 内核崩溃?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!