关于BUG_ON() dump_stack 的一点笔记

调试的时候很有用的东西:dump_stack
 
使用前,先在内核配置中把kernel debug选上:
2.6版本
make menuconfig:
kernel hacking-->
kernel debug

4.0版本,因#ifdef CONFIG_BUG后才会定义WARN_ON

  | |         General setup  --->

  | |     -*- Configure standard kernel features (expert users)  --->

  | |     [*]   BUG() support

关于BUG_ON()的一点笔记

最近在看isp1362的驱动经常看到这个BUG_ON()在网上找了些相关资料,现总结如下

先看代码吧:

 

 

对于blackfin来说有如下定义(现在没时间学习blackfin体系,还看不懂以后有时间在看了):

 

 

作用:一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。为什么这些声明会导致 oops跟硬件的体系结构是相关的。大部分体系结构把BUG()和BUG_ON()定义成某种非法操作,这样自然会产生需要的oops。你可以把这些调用当作断言使用,想要断言某种情况不该发生
if (bad_thing)
BUG();
或者使用更好的形式:
BUG_ON(bad_thing);

可以用panic()引发更严重的错误。调用panic()不但会打印错误消息而且还会挂起整个系统。显然,你只应该在极端恶劣的情况下使用它:
if (terrible_thing)
       panic("foo is %ld/n", foo);

 有些时候,你只是需要在终端上打印一下栈的回溯信息来帮助你测试。此时可以使用dump_stack()。它只在终端上打印寄存器上下文和函数的跟踪线索:
if (!debug_check) {
       printk(KERN_DEBUG "provide some information.../n");
       dump_stack();
}

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭