Gestion des exceptions du débogueur
La gestion par le système des exceptions en mode utilisateur prend en charge les débogueurs sophistiqués. Si le processus dans lequel une exception se produit est en cours de débogage, le système génère un événement de débogage. Si le débogueur utilise la fonction WaitForDebugEvent , l’événement de débogage entraîne le retour de cette fonction avec un pointeur vers une structure DEBUG_EVENT . Cette structure contient les identificateurs de processus et de thread que le débogueur peut utiliser pour accéder à l’enregistrement de contexte du thread. La structure contient également une structure EXCEPTION_DEBUG_INFO qui inclut une copie de l’enregistrement d’exception.
Lorsque le système recherche un gestionnaire d’exceptions, il effectue deux tentatives pour notifier le débogueur d’un processus. La première tentative de notification permet au débogueur de gérer les exceptions de point d’arrêt ou à étape unique. Il s’agit d’une notification de première chance. L’utilisateur peut ensuite émettre des commandes de débogueur pour manipuler l’environnement du processus avant l’exécution des gestionnaires d’exceptions. La deuxième tentative de notification du débogueur se produit uniquement si le système ne parvient pas à trouver un gestionnaire d’exceptions basé sur une trame qui gère l’exception. C’est ce qu’on appelle la notification de la dernière chance. Si le débogueur ne gère pas l’exception après la notification de la dernière chance, le système met fin au processus en cours de débogage.
À chaque tentative de notification, le débogueur utilise la fonction ContinueDebugEvent pour renvoyer le contrôle au système. Avant de retourner le contrôle, le débogueur peut gérer l’exception et modifier l’état du thread comme il convient, ou il peut choisir de ne pas gérer l’exception. À l’aide de ContinueDebugEvent, le débogueur peut indiquer qu’il a géré l’exception, auquel cas l’état de la machine est restauré et l’exécution du thread est poursuivie au point où l’exception s’est produite. Le débogueur peut également indiquer qu’il n’a pas géré l’exception, ce qui amène le système à poursuivre sa recherche d’un gestionnaire d’exceptions.