Linux内核崩溃 dump调试

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

内核-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处

        两个值指得都是汇编代码的值

反汇编定位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值