Partager via


Syntaxe multiprocesseur

KD et WinDbg en mode noyau prennent en charge le débogage de plusieurs processeurs. Vous pouvez effectuer ce type de débogage sur n’importe quelle plateforme multiprocesseur.

Les processeurs sont numérotés zéro à n.

Si le processeur actuel est processeur 0 (autrement dit, s’il s’agit du processeur qui a provoqué l’activité du débogueur), vous pouvez examiner les autres processeurs non actuels (processeurs un par n). Toutefois, vous ne pouvez rien modifier dans les processeurs non actuels. Vous ne pouvez que voir leur état.

Sélection d’un processeur

Vous pouvez utiliser la commande .echocpunum (Show CPU Number) pour afficher les numéros de processeur du processeur actuel. La sortie de cette commande vous permet de savoir immédiatement, grâce au texte de l’invite de débogage du noyau, quand vous travaillez sur un système multiprocesseur.

Dans l’exemple suivant, 0 : devant l’invite kd> indique que vous déboguez le premier processeur de l’ordinateur.

0: kd>

Utilisez la commande ~s (Modifier le processeur actuel) pour basculer entre les processeurs, comme l’illustre l’exemple suivant.

0: kd> ~1s
1: kd>

Vous déboguez maintenant le deuxième processeur sur l’ordinateur.

Vous devrez peut-être modifier les processeurs sur un système multiprocesseur si vous rencontrez un arrêt et que vous ne pouvez pas comprendre la trace de la pile. L’arrêt a peut-être eu lieu sur un autre processeur.

Spécification de processeurs dans d’autres commandes

Vous pouvez ajouter un numéro de processeur avant plusieurs commandes. Ce nombre n’est pas précédé d’un tilde (~), sauf dans la commande ~S .

Note Dans le débogage en mode utilisateur, le tilde est utilisé pour spécifier des threads. Pour plus d’informations sur cette syntaxe, consultez Syntaxe du thread.

Les ID de processeur ne doivent pas être référencés explicitement. Au lieu de cela, vous pouvez utiliser une expression numérique qui se résout en entier qui correspond à un ID de processeur. Pour indiquer que l’expression doit être interprétée comme un processeur, utilisez la syntaxe suivante.

||[Expression]

Dans cette syntaxe, les crochets sont requis, et Expression signifie toute expression numérique qui se résout en entier qui correspond à un ID de processeur.

Dans l’exemple suivant, le processeur change en fonction de la valeur d’un pseudo-registre défini par l’utilisateur.

||[@$t0]

exemples de

L’exemple suivant utilise la commande k (Display Stack Backtrace) pour afficher une trace de pile à partir du processeur 2.

1: kd> 2k 

L’exemple suivant utilise la commande r (Registers) pour afficher le registre eax du processeur 3.

1: kd> 3r eax 

Toutefois, la commande suivante génère une erreur de syntaxe, car vous ne pouvez pas modifier l’état d’un processeur autre que le processeur actuel.

1: kd> 3r eax=808080 

Points d’arrêt

Pendant le débogage du noyau, les commandes bp, bu, bm (Set Breakpoint) et ba (Break on Access) s’appliquent à tous les processeurs d’un ordinateur multiprocesseur.

Par exemple, si le processeur actuel est trois, vous pouvez entrer la commande suivante pour placer un point d’arrêt sur SomeAddress.

1: kd> bp SomeAddress 

Ensuite, tout processeur (pas seulement le processeur un) qui s’exécute à cette adresse provoque une exception de point d'arrêt.

Affichage des informations du processeur

Vous pouvez utiliser l’extension !running pour afficher l’état de chaque processeur sur l’ordinateur cible. Pour chaque processeur, !running peut également afficher les champs de thread actuels et suivants à partir du bloc de contrôle de processus (PRCB), l’état des 16 verrous en file d’attente intégrés et une trace de pile.

Vous pouvez utiliser les extensions !cpuinfo et !cpuid pour afficher des informations sur les processeurs eux-mêmes.