linux 内核态调试函数BUG_ON()

作用:一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。

 

     当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。为什么这些声明会导致 oops跟硬件的体系结构

 

     是相关的。大部分体系结构把BUG()和BUG_ON()定义成某种非法操作,这样自然会产生需要的oops。你可以把这些调用当作断言使用,想要断言某种情况不该发生:

 

if (bad_thing)

 

BUG(); //需要linux 内核开启General setup->Configure standard kernel features->BUG() support

 

或者使用更好的形式:

 

BUG_ON(bad_thing);

 

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

 

if (terrible_thing)

 

       panic("foo is %ld\n", foo);

 

 有些时候,你只是需要在终端上打印一下栈的回溯信息来帮助你测试。此时可以使用dump_stack()。它只在终端上打印寄存器上下文和函数的跟踪线索:

 

if (!debug_check) {

 

       printk(KERN_DEBUG "provide some information...\n");

 

       dump_stack();

 

}

 

二.WARN_ON

 

而WARN_ON则是调用dump_stack,打印堆栈信息,不会OOPS

 

 #define WARN_ON(condition) do { /

 

       if (unlikely((condition)!=0)) { /

 

printk("Badness in %s at %s:%d/n", __FUNCTION__, __FILE__,__LINE__); /

 

dump_stack(); /

 

         } /

 

  } while (0)

 

具体的调用情况与中断有关,可以通过linux中断机制来学习。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章