linux内核定位方法总结

来源:互联网 发布:网络的协议数据单元 编辑:程序博客网 时间:2024/06/13 16:25

1 CPU支持ECC的话打开ECC,并且在系统异常中断的时候打印出来,因为内存多bit ECC会导致系统异常。

MCHECK_EXCEPTION(0x200, Machine, machine_exception)    =>static struct cpu_spec __initdata cpu_specs[]        /* e500v2 */        .machine_check      = machine_check_e500,        .platform       = "ppc8548",        machine_check_e500            =>unsigned long reason = get_mc_reason(regs);            =>if (reason & MCSR_BUS_WBERR)                printk("Bus - Write Data Bus Error\n");            =>打印regs->nip//出现异常等指令地址bus有一种可能性是内存出现ECC错误,可以在这里打印内存ECC错误寄存器信息

2 内核的hung task检测;
3 内核的原子操作不能有休眠动作的检测
“BUG: sleeping function called from invalid context at ……”(might_sleep函数说明)
http://blog.csdn.net/hp0773/article/details/12658501
4 coredump。用户态异常,没有挂接私有信号处理函数,导致coredump,详见《信号处理学习心得》
注意

#ulimit -c //真相0#ulimit //假象ulimited需要修改 #ulimit -c unlimited修改后再查#ulimit -culimited调试程序,会在当前路径生成 core可以修改路径:echo /root/core_%p > /proc/sys/kernel/core_pattern生成的core在/root目录下,后缀是调试程序的进程号

5关于死锁
一次spinlock死锁故障的定位(太经典,收藏!) http://blog.csdn.net/lqxandroid2012/article/details/53581076
spin_lock浅析【转】 - 张昺华-sky - 博客园 http://www.cnblogs.com/sky-heaven/p/7121582.html =》这个人的博客有很多好文章

驱动程序的调测方法与技巧 http://blog.csdn.net/lichangc/article/details/43272457

如下文章写得挺好
linux kernel oops linux 异常分析
http://www.cnblogs.com/wahaha02/p/5363793.html

原创粉丝点击