Partager via


z (Execute While)

La commande z exécute une commande alors qu’une condition donnée est vraie.

Mode Utilisateur

Command ; z( Expression ) 

Mode Noyau

Command ; [Processor] z( Expression )

Paramètres

Commander
Spécifie la commande à exécuter pendant que la condition Expression correspond à une valeur différente de zéro. Cette commande est toujours exécutée au moins une fois.

Processeur
Spécifie le processeur qui s’applique au test. Pour plus d’informations sur la syntaxe, consultez Syntaxe multiprocesseur. Vous ne pouvez spécifier les processeurs qu’en mode noyau.

Expression
Spécifie la condition à tester. Si cette condition est évaluée à une valeur différente de zéro, la commande Command est réexécutée, puis l’expression est à nouveau testée. Pour plus d’informations sur la syntaxe, consultez la syntaxe d’expression numérique.

Environnement

Élément Description
Modes Mode utilisateur, mode noyau
Targets Live, vidage de la mémoire
Platforms Tous

Notes

Dans de nombreuses commandes du débogueur, le point-virgule est utilisé pour séparer les commandes non liées. Toutefois, dans la commande z , un point-virgule sépare le « z » du paramètre Command .

La commande Command est toujours exécutée au moins une fois, puis Expression est testée. Si la condition est une valeur différente de zéro, la commande est réexécutée, puis l’expression est à nouveau testée. (Ce comportement est similaire à un langage C - boucle while , pas une boucle while simple . )

S’il existe plusieurs points-virgules à gauche de la « z », toutes les commandes à gauche du « z » se répètent tant que la condition Expression est vraie. Ces commandes peuvent être n’importe quelle commande de débogueur qui autorise un point-virgule terminal.

Si vous ajoutez un autre point-virgule et des commandes supplémentaires après la commande z , ces commandes supplémentaires sont exécutées une fois la boucle terminée. Nous déconseillons généralement une ligne commençant par « z », car elle génère une sortie sans intérêt à jamais, sauf si la condition devient false en raison d’une autre action. Notez que vous pouvez imbriquer des commandes z .

Pour interrompre une boucle qui continue trop longtemps, utilisez Ctrl+C dans CDB ou KD, ou utilisez Debug | Arrêtez à partir du menu ou ctrl+arrêt dans WinDbg.

L’exemple de code suivant montre un moyen inutilement complexe de zéro le registre eax .

0:000> reax = eax - 1 ; z(eax)

L’exemple suivant incrémente les registres eax et ebx jusqu’à ce qu’un d’entre eux soit au moins 8, puis il incrémente le registre ecx une fois.

0:000> reax=eax+1; rebx=ebx+1; z((eax<8)|(ebx<8)); recx=ecx+1

L’exemple suivant utilise la syntaxe d’expression C++ et utilise le pseudo-registre $t 0 comme variable de boucle.

0:000> .expr /s c++
Current expression evaluator: C++ - C++ source expressions

0:000> db pindexcreate[@$t0].szKey; r$t0=@t0+1; z( @$t0 < cIndexCreate )

Voir aussi

j (Exécuter If-Else)