시스템의 사용자 모드 예외 처리는 정교한 디버거를 지원합니다. 예외가 발생하는 프로세스가 디버그되는 경우 시스템은 디버그 이벤트를 생성합니다. 디버거가 WaitForDebugEvent 함수를 사용하는 경우 디버그 이벤트로 인해 해당 함수가 DEBUG_EVENT 구조체에 대한 포인터와 함께 반환됩니다. 이 구조에는 디버거가 스레드의 컨텍스트 레코드에 액세스하는 데 사용할 수 있는 프로세스 및 스레드 식별자가 포함됩니다. 또한 이 구조체에는 예외 레코드의 복사본을 포함하는 EXCEPTION_DEBUG_INFO 구조체가 포함되어 있습니다.
시스템에서 예외 처리기를 검색할 때 프로세스의 디버거에 알리기 위해 두 번의 시도를 합니다. 첫 번째 알림 시도는 중단점 또는 단일 단계 예외를 처리할 수 있는 기회를 디버거에 제공합니다. 이는 첫 번째 기회 알림입니다. 그러면 사용자는 예외 처리기가 실행되기 전에 디버거 명령을 실행하여 프로세스의 환경을 조작할 수 있습니다. 디버거에 알리는 두 번째 시도는 시스템에서 예외를 처리하는 프레임 기반 예외 처리기를 찾을 수 없는 경우에만 발생합니다. 이는 마지막 기회 알림으로 알려진 것입니다. 마지막 알림 이후에 디버거가 예외를 처리하지 않으면 시스템이 디버그 중인 프로세스를 종료합니다.
각 알림 시도에서 디버거는 ContinueDebugEvent 함수를 사용하여 제어를 시스템에 반환합니다. 컨트롤을 반환하기 전에 디버거는 예외를 처리하고 스레드 상태를 적절하게 수정하거나 예외를 처리하지 않도록 선택할 수 있습니다. ContinueDebugEvent사용하여 디버거가 예외를 처리했음을 나타낼 수 있습니다. 이 경우 컴퓨터 상태가 복원되고 예외가 발생한 지점에서 스레드 실행이 계속됩니다. 디버거는 예외를 처리하지 않았음을 나타낼 수도 있습니다. 이로 인해 시스템에서 예외 처리기에 대한 검색을 계속할 수 있습니다.