2012-10-09 87 views
1

我在內核代碼中輸入BUG_ON。我想知道當時出了什麼問題。 BUG_ON將檢查條件,如果它是真的,它會驚慌。將BUG_ON打印消息

BUG_ON打印在/ var/log/messages中的消息? 它會在恐慌之前打印它正在檢查的值嗎?

回答

4

是的。從include/asm-generic/bug.h

#ifndef HAVE_ARCH_BUG 
#define BUG() do { \ 
    printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \ 
    panic("BUG!"); \ 
} while (0) 
#endif 

#ifndef HAVE_ARCH_BUG_ON 
#define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while(0) 
#endif 

前提是你的內核編譯適當,BUG_ON會恐慌之前打印的消息。

+2

請注意,該消息可能不會被記錄在/ var/log/messages中,因爲這需要系統繼續運行足夠長的時間以便記錄器寫入它到磁盤。恐慌立即殺死了系統。 – duskwuff

1

大多數情況下,郵件不會被記錄到/ var/log/messages。您將能夠看到您是否在機器中配置了串行控制檯。如果您想了解更多的細節,你可能必須添加的printk,並重新編譯內核

http://kernelnewbies.org/KernelHacking-HOWTO/Debugging_Kernel

,或者你可以收集vmcore在獲得的恐慌

http://www.dedoimedo.com/computers/crash.html

這個工程的SUSE或更多詳情RHEL。對於其他操作系統,它們可能具有類似的機制