系統的使用者模式例外狀況處理可支援複雜的調試程式。 如果發生例外狀況的進程正在進行偵錯,系統會產生偵錯事件。 如果調試程式使用 WaitForDebugEvent 函式,偵錯事件會讓該函式傳回具有 DEBUG_EVENT 結構的指標。 此結構包含調試程式可用來存取線程內容記錄的進程和線程標識碼。 結構也包含包含例外狀況記錄複本的 EXCEPTION_DEBUG_INFO 結構。
當系統搜尋例外狀況處理程式時,它會嘗試兩次通知進程的調試程式。 第一次通知嘗試會提供調試程式處理斷點或單一步驟例外狀況的機會。 這稱為 第一次機會通知。 然後,使用者可以發出調試程式命令,以在執行任何例外狀況處理程式之前來操作進程的環境。 只有在系統找不到可以處理例外狀況的框架式例外處理程式時,才會嘗試通知偵錯工具。 這被稱為 最後機會通知。 如果調試程式在最後一次機會通知之後未處理例外狀況,系統就會終止正在偵錯的進程。
在每次嘗試通知時,調試程式都會使用 ContinueDebugEvent 函式,將控制權傳回系統。 在傳回控件之前,調試程式可以處理例外狀況,並視需要修改線程狀態,或者可以選擇不處理例外狀況。 使用 ContinueDebugEvent,調試程式可以指出它已處理例外狀況,在此情況下,機器狀態會還原,線程執行會在發生例外狀況的點繼續執行。 調試程式也可以指出它未處理例外狀況,這會導致系統繼續搜尋例外狀況處理程式。