Tratamento de exceção do depurador

O tratamento do sistema de exceções no 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 de depuração fará com que essa função retorne com um ponteiro para uma estrutura de DEBUG_EVENT . Essa estrutura contém o processo e os identificadores de 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ção, ele faz duas tentativas de notificar o depurador de um processo. A primeira tentativa de notificação fornece ao depurador a oportunidade de lidar com exceções de ponto de interrupção ou de etapa única. Isso é conhecido como notificação de primeira chance. Em seguida, o usuário pode emitir comandos de depurador para manipular o ambiente do processo antes que os manipuladores de exceção sejam executados. 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 manipula 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 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 ele lidou com a exceção, caso em que o estado do computador é 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 lidou com a exceção, o que faz com que o sistema continue sua pesquisa por um manipulador de exceção.