Kernel panic 堆栈信息怎么看
时间: 2023-06-29 15:02:45 浏览: 182
Kernel panic 是指 Linux 内核遇到了无法继续执行的致命错误,此时会在屏幕上输出一些错误信息,其中就包括堆栈信息。堆栈信息是指发生错误时 CPU 执行的代码路径,可以通过堆栈信息来定位错误发生的位置。
通常,堆栈信息会以类似下面的形式输出:
```
Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
CPU: 0 PID: 1 Comm: init Not tainted 4.4.0-31-generic #50-Ubuntu
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014
ffffffff813f7ab7 ffff8800363c7e00 ffffffff817e0c5d 0000000000000000
ffff8800363c7e38 ffff8800363c7e20 ffffffff8108124c ffff8800363c7e58
ffffffff810812a2 ffffffff81862f78 ffffffff81862f68 ffffffff81862f68
Call Trace:
[<ffffffff813f7ab7>] dump_stack+0x63/0x82
[<ffffffff817e0c5d>] panic+0xc8/0x1fe
[<ffffffff8108124c>] do_exit+0x6d4/0x6e0
[<ffffffff810812a2>] do_group_exit+0x42/0xa0
[<ffffffff8108a300>] get_signal+0x2f8/0x5c0
[<ffffffff81015eb5>] do_signal+0x55/0x6d0
[<ffffffff8108f9cc>] ? __fget_light+0x3c/0x50
[<ffffffff81011c2b>] do_notify_resume+0x9b/0xc0
[<ffffffff817fba0c>] int_signal+0x12/0x17
```
堆栈信息的最后一行是 `Call Trace:`,接下来的几行是函数调用栈,每一行都是一个函数调用,最上面的是发生错误的函数,最下面的是最开始的函数。
在上面的例子中,发生错误的函数是 `panic+0xc8/0x1fe`,它是由函数 `do_exit+0x6d4/0x6e0` 调用的,而 `do_exit` 又是由函数 `do_group_exit+0x42/0xa0` 调用的,以此类推,直到最下面的 `int_signal+0x12/0x17`,它是被中断处理程序调用的。
通过分析堆栈信息,可以找到发生错误的函数及其调用关系,从而定位错误原因。
阅读全文