當你正在調試程序的時候,你是否曾經看到過消息窗口輸出關于“First Chance Exception”(第一輪異常)的信息?也許有人會問,“什么是第一輪異常?”、“出現第一輪異常的提示意味著代碼有問題嗎?”
什么是第一輪異常?
(1)當一個程序被調試的時候,如果有異常發生調試器會得到通知,這個時候,被調試的應用程序將會被掛起并且調試器決定如何來處理這個異常。當一個異常第一次經過這種機制就是所謂的“第一輪異常”。根據調試器的設置,調試器可能會忽略這個異常并讓程序繼續執行,或者保持被調試程序的掛起狀態并進入調試模式。
如果應用程序無法處理這個異常,調試器會再次得到通知,這個就是所謂的“Second Chance Exception”(第二輪異常)了。同樣調試器會再次掛起被調試程序并決定如何來處理這個異常。通常情況下,當第二輪異常發生的時候,調試器都被配置為進入調試模式,來允許用戶進行調試。
出現第一輪異常的提示意味著代碼有問題嗎?
第一輪異常的提示消息通常并不意味著代碼有問題,對于那些能完善處理異常的程序或者組件來說,出現第一輪異常的提示信息意味著出現了一個異常并且得到了妥善的處理。
對于沒有異常處理代碼的程序來說,調試器會收到第二輪異常通知并且會提示沒有處理的異常信息。
(以上信息整理自《What is a First Chance Exception》)
異常與調試器
Microsoft Visual Studio的調試器為異常調試提供了出色的支持。當進程中的某個線程拋出異常,操作系統會馬上通知調試器(如果調試器已經附著)。這個通知被稱為“首次機會通知”(first-chance notification)。調試器將響應這個通知,促使線程尋找異常過濾程序。如果所有的異常過濾程序都返回EXCEPTION_CONTINUE_SEARCH,操作系統會給調試器一個“最后機會通知”(last-chance notification)。這兩個通知的存在使得軟件開發人員能夠更好的控制異常調試的過程。
針對每個解決方案,我們可以通過Visual Studio調試器的“調試”-“異常”菜單打開Exceptions對話框決定調試器如何響應首次機會異常通知。

(以上信息整理自《Windows核心編程》)
個人總結:對于First Chance Exception和Second/Last Chance Exception,這些都只會出現于調試器中。前者意味著被調試程序確實產生了一個異常,如果被調試程序自己處理掉了這個異常,那么就不會出現Second/Last Chance Exception的提示,反之如果沒有處理則出現Second/Last Chance Exception的提示;如果是一個正常執行的程序,Second/Last Chance Exception意味著這個程序的終止運行。
本文出自程序人生 >> What is a First Chance Exception(什么是第一輪異常)
推薦閱讀:
來用低級鍵盤鉤子實現鍵盤改鍵QQScLauncher逆向分析