z (Execute While)

Il comando z esegue un comando mentre una determinata condizione è true.

Modalità utente

Command ; z( Expression ) 

Modalità kernel

Command ; [Processor] z( Expression )

Parametri

Comando
Specifica il comando da eseguire mentre la condizione Expression restituisce un valore diverso da zero. Questo comando viene sempre eseguito almeno una volta.

Processore
Specifica il processore che si applica al test. Per altre informazioni sulla sintassi, vedere Sintassi multiprocessore. È possibile specificare processori solo in modalità kernel.

Espressione
Specifica la condizione da testare. Se questa condizione restituisce un valore diverso da zero, il comando Command viene eseguito di nuovo e quindi Expression viene testato di nuovo. Per altre informazioni sulla sintassi, vedere Sintassi delle espressioni numeriche.

Ambiente

Articolo Descrizione
Modalità Modalità utente, modalità kernel
Target Live, crash dump
Piattaforme Tutte le date

Osservazioni:

In molti comandi del debugger, il punto e virgola viene usato per separare i comandi non correlati. Tuttavia, nel comando z un punto e virgola separa "z" dal parametro Command .

Il comando Command viene sempre eseguito almeno una volta e quindi viene testato Expression . Se la condizione è un valore diverso da zero, il comando viene eseguito di nuovo e quindi Expression viene testato di nuovo. Questo comportamento è simile a quello di un linguaggio C: ciclo while, non un ciclo while semplice.

Se sono presenti diversi punti e virgola a sinistra di "z", tutti i comandi a sinistra della "z" si ripetono finché la condizione Expression è true. Tali comandi possono essere qualsiasi comando del debugger che consenta un punto e virgola del terminale.

Se si aggiungono altri punti e virgola e comandi aggiuntivi dopo il comando z , questi comandi aggiuntivi vengono eseguiti al termine del ciclo. In genere non è consigliabile usare una riga che inizia con "z" perché genera un output non interessante per sempre, a meno che la condizione non diventi false a causa di un'altra azione. Si noti che è possibile annidare i comandi z .

Per interrompere un ciclo che continua per troppo tempo, usare CTRL+C in CDB o KD oppure usare Debug | Interrompere dal menu o CTRL+INTERR in WinDbg.

L'esempio di codice seguente mostra un modo inutilmente complesso per zero il registro eax .

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

L'esempio seguente incrementa i registri eax ed ebx fino a quando uno di essi non è almeno 8 e quindi incrementa il registro ecx una volta.

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

Nell'esempio seguente viene usata la sintassi delle espressioni C++ e viene usato lo pseudoregistro $t 0 come variabile di ciclo.

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 )

Vedi anche

j (Execute If-Else)