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

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