Compartir a través de


z (Ejecutar mientras)

El comando z ejecuta un comando mientras se cumple una condición determinada.

User-Mode

Command ; z( Expression ) 

Kernel-Mode

Command ; [Processor] z( Expression )

Parámetros

Comando
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, el comando Command se ejecuta de nuevo y, a continuación, expression se vuelve a probar. Para obtener más información sobre la sintaxis, vea Sintaxis de expresión numérica.

Entorno

Elemento Descripción
Modos Modo de usuario, modo kernel
Targets Volcado de memoria activo y de memoria
Plataformas All

Comentarios

En muchos comandos del depurador, el punto y coma se usa para separar los 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, expresión se vuelve a probar. (Este comportamiento es similar a un lenguaje C : bucle while , no un bucle while simple).

Si hay varios punto y coma a la izquierda de "z", todos los comandos a la izquierda de "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 del 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 por "z", ya que genera una salida sin interés para siempre, a menos que la condición se vuelva falsa 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 bien use Depurar | Interrumpir en el menú o CTRL+INTERRUMPIR 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 )

Vea también

j (Ejecutar If-Else)