跳到主要內容

發表文章

目前顯示的是 10月, 2016的文章

[LKML] Linus的PDCA - BUG_ON() 的使用方式

[BUG_ON()] It's not a "let's check that  everybody did things right", it's a "this is a major design rule in  this core code". "good BUG_ON() in solid code that has been around forever" and "bad BUG_ON() checking something that we know we might be getting wrong".                                                                                                   by Linus Torvald Linus Torvalds 在釋出 4.8 後,很快地發現 kernel 在開啟 CONFIG_DEBUG_VM 時,容易會讓 kernel panic。[1] 原因是因為在 VM 的程式碼中,在檢查到某個異常情況時, VM_BUG_ON()會 使用 BUG_ON()。 根據該筆修改的  Johannes Weiner  說法,他的程式碼只會在 CONFIG_DEBUG_VM 時使用 BUG_ON(),所以認為對一般使用者不會有影響才對。 並且,作者認為,如果已經遇到了異常情況,卻不用 BUG_ON() 將系統停住,不就讓系統的行為更無法預期、更難 debug 了嗎? [ 2 ] Linus 很快地回了一封 mail ,說明 BUG_ON() 的少數使用時機: 開發者的測試環境 對 error handling 還沒想清楚,但是覺得某個地方絕不該發生,通常只應該在 [RFC] 階段,大概對應開發階段的 UT。 然而,即使開啟了 CONFIG_DEBUG_VM,也不該就讓 BUG_ON() 進入,因為對使用者來說,開啟這個選項是想獲得更多訊息, 而不是讓 kernel 死亡。            這類的 BUG_ON() 經過一些測試後,就應該拿掉。        2