Cassage dans le débogueur
Le code en mode utilisateur et en mode noyau utilise différentes routines pour s’introduire dans le débogueur.
routines d’arrêt User-Mode
Une routine d’arrêt provoque une exception dans le processus actuel, afin que le thread appelant puisse signaler le débogueur associé au processus appelant.
Pour basculer dans un débogueur à partir d’un programme en mode utilisateur, utilisez la fonction DebugBreak. Son prototype est le suivant :
VOID DebugBreak(VOID);
Lorsqu’un programme en mode utilisateur appelle DebugBreak, les actions possibles suivantes se produisent :
Si un débogueur en mode utilisateur est attaché, le programme s’insère dans le débogueur. Cela signifie que le programme s’interrompt et que le débogueur devient actif.
Si un débogueur en mode utilisateur n’est pas attaché, mais que le débogage en mode noyau a été activé au démarrage, l’ordinateur entier s’insère dans le débogueur du noyau. Si un débogueur de noyau n’est pas attaché, l’ordinateur se fige et attend un débogueur de noyau.
Si un débogueur en mode utilisateur n’est pas attaché et que le débogage en mode noyau n’est pas activé, le programme se termine avec une exception non gérée et le débogueur post-mortem (juste-à-temps) est activé. Pour plus d’informations, consultez Activation du débogage post-mortem.
routines d’arrêt Kernel-Mode
Lorsqu’un programme en mode noyau s’interrompt dans le débogueur, l’ensemble du système d’exploitation se bloque jusqu’à ce que le débogueur du noyau autorise la reprise de l’exécution. Si aucun débogueur de noyau n’est présent, il est traité comme un bogue case activée.
La routine DbgBreakPoint fonctionne dans le code en mode noyau, mais est similaire à la routine de mode utilisateur DebugBreak .
La routine DbgBreakPointWithStatus provoque également un arrêt, mais elle envoie également un code status 32 bits au débogueur.
Les routines KdBreakPoint et KdBreakPointWithStatus sont identiques à DbgBreakPoint et DbgBreakPointWithStatus, respectivement, lorsqu’elles sont compilées dans l’environnement de génération vérifié. Lorsqu’elles sont compilées dans l’environnement de build gratuit, elles n’ont aucun effet.
Kernel-Mode routines de pause conditionnelle
Deux routines d’arrêt conditionnel sont disponibles pour le code en mode noyau. Ces routines testent une expression logique. Si l’expression est false, l’exécution s’arrête et le débogueur devient actif.
La macro ASSERT teste une expression logique. Si l’expression est false, l’exécution s’arrête et le débogueur devient actif. L’expression ayant échoué et son emplacement dans le programme sont affichés dans le débogueur.
La macro ASSERTMSG est identique à ASSERT , sauf qu’elle permet d’envoyer un message supplémentaire au débogueur.
ASSERT et ASSERTMSG sont actifs uniquement lorsqu’ils sont compilés dans l’environnement de build vérifié. Lorsqu’elles sont compilées dans l’environnement de build gratuit, elles n’ont aucun effet.