1. 程式人生 > >異常處理之不要放過First-chance exception

異常處理之不要放過First-chance exception

引自:https://blog.csdn.net/m_star_jy_sy/article/details/5578998

不要放過First-chance exception

1)什麼是First-chance exception
 VC6除錯環境下(debug)執行程式時,經常在output視窗看到有
 First-chance exception in hotfoxd.exe (KERNEL32.DLL): 0xE06D7363: Microsoft C++ Exception.
 的輸出字樣。
 當除錯程式時,若引發了異常,那麼偵錯程式會得到通知,應用程式被掛起,由偵錯程式決定如何來處理這個異常。而VC6偵錯程式debug下對異常的預設處理為Stop if no handled,
 即異常未處理(捕獲)時才停止。如果異常被程式捕獲(try...catch...),那麼偵錯程式不會中斷程式,而是繼續執行,並在Output視窗輸出First-chance exception字樣。

2)怎麼解決First-chance exception
 First-chance exception的輸出表示程式產生了異常並被捕獲了。對於異常在除錯階段應該儘可能解決掉,不讓其出現異常。當然有些異常是預期的,有些異常是非預期的。
 例如,ado的查詢語句,如果語句非法,則ado會報出異常。雖然有異常捕獲,程式能繼續執行,但這種錯誤明顯的是需要解決的。 
 對於一個高可用伺服器而言,要求7×24小時的連續執行,如果異常頻繁出現,則會影響到伺服器的持久執行能力。
 所以,在程式釋出之前,過一遍First-chance exception是很有必要的。
 VC6能夠修改偵錯程式的預設行為(Stop if no handled),改為Stop always。通過[Debug/Exceptions]選單。
 

這樣,當出現異常時,即便是有異常捕獲,也會彈出提示對話方塊,並停在異常程式碼處。

 改為Stop always後,查出幾個供應包平臺後臺執行緒掃描資料庫的幾個sql語句不對的bug。這樣的異常在後臺執行緒頻繁丟擲,想必對伺服器有些影響。
 

3)偵錯程式還能對其他異常作出停止處理
 Stack Overflow exception
 Access Violation exception
 等。
 在程式釋出前,建議對這些異常過一遍。