我在內核代碼中輸入BUG_ON
。我想知道當時出了什麼問題。 BUG_ON
將檢查條件,如果它是真的,它會驚慌。將BUG_ON打印消息
將BUG_ON
打印在/ var/log/messages中的消息? 它會在恐慌之前打印它正在檢查的值嗎?
我在內核代碼中輸入BUG_ON
。我想知道當時出了什麼問題。 BUG_ON
將檢查條件,如果它是真的,它會驚慌。將BUG_ON打印消息
將BUG_ON
打印在/ var/log/messages中的消息? 它會在恐慌之前打印它正在檢查的值嗎?
是的。從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
會恐慌之前打印的消息。
大多數情況下,郵件不會被記錄到/ var/log/messages。您將能夠看到您是否在機器中配置了串行控制檯。如果您想了解更多的細節,你可能必須添加的printk,並重新編譯內核
http://kernelnewbies.org/KernelHacking-HOWTO/Debugging_Kernel
,或者你可以收集vmcore在獲得的恐慌
http://www.dedoimedo.com/computers/crash.html
這個工程的SUSE或更多詳情RHEL。對於其他操作系統,它們可能具有類似的機制
請注意,該消息可能不會被記錄在/ var/log/messages中,因爲這需要系統繼續運行足夠長的時間以便記錄器寫入它到磁盤。恐慌立即殺死了系統。 – duskwuff