Gestione delle eccezioni del debugger

La gestione del sistema delle eccezioni in modalità utente offre supporto per debugger sofisticati. Se il processo in cui si verifica un'eccezione viene eseguito il debug, il sistema genera un evento di debug. Se il debugger usa la funzione WaitForDebugEvent , l'evento di debug causa la restituzione di tale funzione con un puntatore a una struttura di DEBUG_EVENT . Questa struttura contiene l'identificatore del processo e del thread che il debugger può usare per accedere al record di contesto del thread. La struttura contiene anche una struttura EXCEPTION_DEBUG_INFO che include una copia del record di eccezione.

Quando il sistema sta cercando un gestore di eccezioni, esegue due tentativi di notificare al debugger di un processo. Il primo tentativo di notifica fornisce al debugger l'opportunità di gestire eccezioni a punti di interruzione o a singolo passaggio. Questa operazione è nota come notifica per la prima probabilità. L'utente può quindi inviare comandi del debugger per modificare l'ambiente del processo prima che vengano eseguiti gestori di eccezioni. Il secondo tentativo di notifica al debugger si verifica solo se il sistema non riesce a trovare un gestore di eccezioni basato su frame che gestisce l'eccezione. Questa operazione è nota come notifica last-chance. Se il debugger non gestisce l'eccezione dopo la notifica dell'ultima probabilità, il sistema termina il processo in fase di debug.

In ogni tentativo di notifica, il debugger usa la funzione ContinueDebugEvent per restituire il controllo al sistema. Prima di restituire il controllo, il debugger può gestire l'eccezione e modificare lo stato del thread in base alle esigenze oppure può scegliere di non gestire l'eccezione. Usando ContinueDebugEvent, il debugger può indicare che ha gestito l'eccezione, nel qual caso lo stato del computer viene ripristinato e l'esecuzione del thread viene continuata al punto in cui si è verificata l'eccezione. Il debugger può anche indicare che non ha gestito l'eccezione, che fa sì che il sistema continui la ricerca di un gestore di eccezioni.