Tratamento de exceções do depurador

O sistema manipula exceções de modo de usuário fornece suporte para depuradores sofisticados. Se o processo no qual ocorre uma exceção estiver sendo depurado, o sistema gerará um evento de depuração. Se o depurador estiver usando a função WaitForDebugEvent, o evento debug fará com que essa função retorne com um ponteiro para uma estrutura DEBUG_EVENT. Essa estrutura contém os identificadores de processo e thread que o depurador pode usar para acessar o registro de contexto do thread. A estrutura também contém uma estrutura EXCEPTION_DEBUG_INFO que inclui uma cópia do registro de exceção.

Quando o sistema está procurando um manipulador de exceções, ele faz duas tentativas de notificar o depurador de um processo. A primeira tentativa de notificação fornece ao depurador uma oportunidade de manipular exceções de ponto de interrupção ou etapa única. Isso é conhecido como notificação de primeira chance. O usuário pode então emitir comandos do depurador para manipular o ambiente do processo antes que qualquer manipulador de exceção seja executado. A segunda tentativa de notificar o depurador ocorre somente se o sistema não conseguir localizar um manipulador de exceção baseado em quadro que manipule a exceção. Isso é conhecido como notificação de última chance. Se o depurador não manipular a exceção após a notificação de última chance, o sistema encerrará o processo que está sendo depurado.

Em cada tentativa de notificação, o depurador usa a função ContinueDebugEvent para retornar o controle ao sistema. Antes de retornar o controle, o depurador pode manipular a exceção e modificar o estado do thread conforme apropriado, ou pode optar por não manipular a exceção. Usando ContinueDebugEvent, o depurador pode indicar que manipulou a exceção, caso em que o estado da máquina é restaurado e a execução do thread é continuada no ponto em que a exceção ocorreu. O depurador também pode indicar que não manipulou a exceção, o que faz com que o sistema continue sua busca por um manipulador de exceções.