Contrôle des processus et des threads
Lorsque vous effectuez un débogage en mode utilisateur, vous activez, affichez, figez, dégelez, suspendez et annulez les processus et threads.
Le processus actif ou actif est le processus en cours de débogage. De même, le thread actif ou actif est le thread que le débogueur contrôle actuellement. Les actions de nombreuses commandes de débogueur sont déterminées par l’identité du processus et du thread actuels. Le processus actuel détermine également les mappages d’adresses virtuelles que le débogueur utilise.
Lorsque le débogage commence, le processus en cours est celui auquel le débogueur est attaché ou qui a provoqué l’exception qui s’est brisée dans le débogueur. De même, le thread actuel est celui qui était actif lorsque le débogueur est attaché au processus ou qui a provoqué l’exception. Toutefois, vous pouvez utiliser le débogueur pour modifier le processus et le thread actuels et pour figer ou libérer des threads individuels.
Dans le débogage en mode noyau, les processus et les threads ne sont pas contrôlés par les méthodes décrites dans cette section. Pour plus d’informations sur la façon dont les processus et les threads sont manipulés en mode noyau, consultez Modification des contextes.
Affichage des processus et des threads
Pour afficher les informations sur les processus et les threads, vous pouvez utiliser les méthodes suivantes :
Le | (État du processus) Commande
Commande ~ (État du thread)
(WinDbg uniquement) Fenêtre Processus et threads
Définition du processus et du thread actuels
Pour modifier le processus ou le thread actuel, vous pouvez utiliser les méthodes suivantes :
Commande |s (Définir le processus actuel)
Commande ~s (Définir le thread actuel)
(WinDbg uniquement) Fenêtre Processus et threads
Gel et suspension des threads
Le débogueur peut modifier l’exécution d’un thread en suspendant le thread ou en figant le thread. Ces deux actions ont des effets quelque peu différents.
Chaque thread a un nombre de suspensions qui lui est associé. Si ce nombre est un ou plus grand, le système n’exécute pas le thread. Si le nombre est égal à zéro ou inférieur, le système exécute le thread le cas échéant.
En règle générale, chaque thread a un nombre de suspensions de zéro. Lorsque le débogueur s’attache à un processus, il incrémente le nombre de suspensions de tous les threads de ce processus d’un seul. Si le débogueur se détache du processus, il décrémente tous les nombres de suspensions d’un seul. Lorsque le débogueur exécute le processus, il décrémente temporairement tous les nombres de suspensions d’un seul.
Vous pouvez contrôler le nombre de interruptions de n’importe quel thread à partir du débogueur à l’aide des méthodes suivantes :
La commande ~n (Suspendre le thread) incrémente d’un le nombre de suspensions du thread spécifié.
La commande ~m (Reprendre le thread) décrémente d’un seul le nombre de suspensions du thread spécifié.
L’utilisation la plus courante de ces commandes consiste à augmenter le nombre de suspensions d’un thread spécifique de un à deux. Lorsque le débogueur s’exécute ou se détache du processus, le thread a alors un nombre de suspensions d’un et reste suspendu, même si d’autres threads du processus sont en cours d’exécution.
Vous pouvez suspendre des threads même lorsque vous effectuez un débogage non invasif.
Le débogueur peut également figer un thread. Cette action est similaire à la suspension du thread à certains égards. Toutefois, « frozen » n’est qu’un paramètre de débogueur. Rien dans le système d’exploitation Windows ne reconnaît que ce thread est différent.
Par défaut, tous les threads sont dégelés. Lorsque le débogueur provoque l’exécution d’un processus, les threads qui sont figés ne s’exécutent pas. Toutefois, si le débogueur se détache du processus, tous les threads se dégelent.
Pour figer et libérer des threads individuels, vous pouvez utiliser les méthodes suivantes :
La commande ~f (Figer le thread) fige le thread spécifié.
La commande ~u (Unfreeze Thread) annule le dégel du thread spécifié.
Dans tous les cas, les threads qui appartiennent au processus cible ne s’exécutent jamais lorsque le débogueur s’est rompu à la cible. Le nombre de suspensions d’un thread affecte le comportement du thread uniquement lorsque le débogueur exécute le processus ou se détache. Le status gelé affecte le comportement du thread uniquement lorsque le débogueur exécute le processus.
Threads et processus dans d’autres commandes
Vous pouvez ajouter des spécificateurs de thread ou des spécificateurs de processus avant de nombreuses autres commandes. Pour plus d’informations, consultez les rubriques de commande individuelles.
Vous pouvez ajouter le qualificateur ~e (commande spécifique au thread) avant de nombreuses commandes et commandes d’extension. Ce qualificateur entraîne l’exécution de la commande par rapport au thread spécifié. Ce qualificateur est particulièrement utile si vous souhaitez appliquer une commande à plusieurs threads. Par exemple, la commande suivante répète la commande d’extension !gle pour chaque thread en cours de débogage.
~*e !gle
Plusieurs systèmes
Le débogueur peut s’attacher à plusieurs cibles en même temps. Lorsque ces processus incluent des fichiers de vidage ou des cibles actives sur plusieurs ordinateurs, le débogueur référence un système, un processus et un thread pour chaque action. Pour plus d’informations sur ce type de débogage, consultez Débogage de plusieurs cibles.