z (Execute While)
Der Befehl z führt einen Befehl aus, während eine bestimmte Bedingung wahr ist.
Benutzermodus
Command ; z( Expression )
Kernelmodus
Command ; [Processor] z( Expression )
Parameter
Befehl
Gibt den auszuführenden Befehl an, während die Ausdrucksbedingung als Wert ungleich Null ausgewertet wird. Dieser Befehl wird immer mindestens einmal ausgeführt.
Prozessor
Gibt den Prozessor an, der für den Test gilt. Weitere Informationen zur Syntax finden Sie unter Multiprozessorsyntax. Sie können Prozessoren nur im Kernelmodus angeben.
Ausdruck
Gibt die zu testde Bedingung an. Wenn diese Bedingung einen Wert ungleich Null auswertet, wird der Befehl "Befehl" erneut ausgeführt und anschließend erneut getestet. Weitere Informationen zur Syntax finden Sie unter Numerische Ausdruckssyntax.
Environment
Element | Beschreibung |
---|---|
Modi | Benutzermodus, Kernel-Modus |
Ziele | Live, Crash Dump |
Plattformen | Alle |
Hinweise
In vielen Debuggerbefehlen wird das Semikolon verwendet, um nicht verwandte Befehle zu trennen. Im Befehl z trennt ein Semikolon jedoch das "z" vom Command-Parameter .
Der Befehl "Befehl" wird immer mindestens einmal ausgeführt, und anschließend wird "Expression " getestet. Wenn es sich bei der Bedingung um einen Wert ungleich Null handelt, wird der Befehl erneut ausgeführt, und der Ausdruck wird erneut getestet. (Dieses Verhalten ähnelt einer C-Sprache - während der Schleife und nicht einer einfachen Schleife.)
Wenn links neben "z" mehrere Semikolons vorhanden sind, wiederholen sich alle Befehle links neben "z", solange die Ausdrucksbedingung "true" ist. Solche Befehle können alle Debuggerbefehle sein, die ein Terminal-Semikolon zulassen.
Wenn Sie nach dem Befehl z weitere Semikolons und zusätzliche Befehle hinzufügen, werden diese zusätzlichen Befehle nach Abschluss der Schleife ausgeführt. In der Regel wird keine Zeile empfohlen, die mit "z" beginnt, da sie uninteressante Ausgabe für immer generiert, es sei denn, die Bedingung wird aufgrund einer anderen Aktion falsch. Beachten Sie, dass Sie Z-Befehle verschachteln können.
Um eine Schleife zu unterbrechen, die zu lange fortgesetzt wird, verwenden Sie STRG+C in CDB oder KD, oder verwenden Sie Debug | Aufheben des Menüs oder STRG+BREAK in WinDbg.
Das folgende Codebeispiel zeigt eine unnötig komplexe Methode zum Nullen des Eax-Registers .
0:000> reax = eax - 1 ; z(eax)
Im folgenden Beispiel werden die eax - und ebx-Register erhöht, bis mindestens einer davon mindestens 8 ist, und anschließend wird das Ecx-Register einmal erhöht.
0:000> reax=eax+1; rebx=ebx+1; z((eax<8)|(ebx<8)); recx=ecx+1
Im folgenden Beispiel wird die C++-Ausdruckssyntax verwendet und das Pseudoregister $t 0 als Schleifenvariable verwendet.
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 )