z (Ejecutar mientras)
El comando z ejecuta un comando mientras se cumple una condición determinada.
Modo de usuario
Command ; z( Expression )
Modo kernel
Command ; [Processor] z( Expression )
Parámetros
Mandar
Especifica el comando que se va a ejecutar mientras la condición Expresión se evalúa como un valor distinto de cero. Este comando siempre se ejecuta al menos una vez.
Procesador
Especifica el procesador que se aplica a la prueba. Para obtener más información sobre la sintaxis, vea Sintaxis de varios procesadores. Solo puede especificar procesadores en modo kernel.
Expresión
Especifica la condición que se va a probar. Si esta condición se evalúa como un valor distinto de cero, se vuelve a ejecutar el comando Command y, a continuación, se vuelve a probar Expression . Para obtener más información sobre la sintaxis, consulte Sintaxis de expresión numérica.
Entorno
Elemento | Descripción |
---|---|
Modos | Modo de usuario, modo kernel |
Destinos | En tiempo real, volcado de errores |
Platforms | All |
Comentarios
En muchos comandos del depurador, el punto y coma se usa para separar comandos no relacionados. Sin embargo, en el comando z , un punto y coma separa "z" del parámetro Command .
El comando Command siempre se ejecuta al menos una vez y, a continuación , se prueba Expression . Si la condición es un valor distinto de cero, se vuelve a ejecutar el comando y, a continuación, se vuelve a probar Expression . (Este comportamiento es similar a un lenguaje C, mientras que el bucle, no un bucle while simple).
Si hay varios punto y coma a la izquierda de "z", todos los comandos a la izquierda de la "z" se repiten siempre y cuando la condición expresión sea verdadera. Estos comandos pueden ser cualquier comando del depurador que permita un punto y coma terminal.
Si agrega otro punto y coma y comandos adicionales después del comando z , estos comandos adicionales se ejecutan una vez completado el bucle. Normalmente no se recomienda una línea que comience con "z" porque genera una salida que no es de interés para siempre a menos que la condición se convierta en false debido a alguna otra acción. Tenga en cuenta que puede anidar comandos z .
Para interrumpir un bucle que continúa durante demasiado tiempo, use CTRL+C en CDB o KD, o use Depurar | Interrumpa desde el menú o CTRL+BREAK en WinDbg.
En el ejemplo de código siguiente se muestra una forma innecesariamente compleja de cero el registro eax .
0:000> reax = eax - 1 ; z(eax)
En el ejemplo siguiente se incrementan los registros eax y ebx hasta que uno de ellos es al menos 8 y, a continuación, incrementa el registro ecx una vez.
0:000> reax=eax+1; rebx=ebx+1; z((eax<8)|(ebx<8)); recx=ecx+1
En el ejemplo siguiente se usa la sintaxis de expresión de C++ y se usa el pseudo-register $t 0 como una variable de bucle.
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 )