Kernel
linux中的死硬是什麼?有模軟嗎?
if ((m.cs & 3) == 3) { /* If this triggers there is no way to recover. Die hard. */ BUG_ON(!on_thread_stack() || !user_mode(regs));
如上所述,什麼是死硬?什麼是軟死?
執行 BUG_ON() 後,其餘程式碼會繼續執行嗎?
“死硬”意味著殺死執行緒。與讓它繼續執行(可能通過返回失敗結果)相反,呼叫程式碼可以處理以優雅地退出/繼續。從@don-aman 提到的BUG FAQ 中,
BUG_ON( condition );
是相同的
if ( condition ) BUG();
因此,如果條件為假,則 BUG_ON 不會被觸發,並且程式碼可以繼續 - 這就是為什麼您可以
if
在core.c
. 此外,您可以測試BUG()
自己:>>cat h.c #include <stdio.h> #define BUG() __asm__ __volatile__("ud2\n") int main() { printf ("hi\n"); BUG(); printf ("ho\n"); } >>cc -o h h.c >>./h hi Illegal instruction (core dumped) >>