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中斷機制來學習。

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