内核-crash(崩溃),oops消息,dump
oops
(也称 panic),称程序运行崩溃,程序崩溃后会产生oops消息。
应用程序或内核线程的崩溃都会产生oops消息,通常发生oops时,系统不会发生死机,而在终端或日志中打印oops信息
内容有PC指针,CPU R0-R15寄存器和堆栈信息,崩溃前函数调用情况等
oops 的格式
内核的文档里的详细的Oops的说明,的名字是
Documentation/oops-tracing.txt
http://www.mjmwired.net/kernel/Documentation/oops-tracing.txt
Linux Kernel Documentation :: oops-tracing.txt (mjmwired.net)
oops第一段出错是内存page地址,
例如提示,
Unable to handle kernel NULL pointer dereference at virtual address 00000000
往往表示碰到空指针了
第二段出错时是寄存器的快照,不同CPU显示不同情况;
其中基本上所有CPU都会有的PC寄存器(Program counter register),它保存最后出问题的地址。
LR保存着函数返回地址。这里就比较容易看出是谁出问题
最重要是第三段,即可出错的调用堆栈(Call Trace).从这里即可推算出错的所在函数
[ 9054.949421] Call trace:
[ 9054.951886] w5500_write_buf+0x15c/0x1ac [w5500_wiz0]
这告诉我们,w5500_write_buf函数有0x1ac 这么大,而Oops发生在0x15c处
两个值指得都是汇编代码的值
反汇编定位

文章详细介绍了Linux系统中内核崩溃时出现的oops消息,包括其格式、内容和分析方法,如通过PC指针、寄存器和调用堆栈来定位错误。此外,还阐述了coredump的概念,当程序异常终止时如何生成和使用coredump文件进行调试,包括设置coredump大小、路径和使用gdb进行分析的步骤。
最低0.47元/天 解锁文章
682

被折叠的 条评论
为什么被折叠?



