Compartilhar via


z (Executar Enquanto)

O comando z executa um comando enquanto uma determinada condição é verdadeira.

User-Mode

Command ; z( Expression ) 

Kernel-Mode

Command ; [Processor] z( Expression )

Parâmetros

Comando
Especifica o comando a ser executado enquanto a condição Expression é avaliada como um valor diferente de zero. Esse comando sempre é executado pelo menos uma vez.

Processador
Especifica o processador que se aplica ao teste. Para obter mais informações sobre a sintaxe, consulte Sintaxe de vários processadores. Você pode especificar processadores somente no modo kernel.

Expressão
Especifica a condição a ser testada. Se essa condição for avaliada como um valor diferente de zero, o comando Command será executado novamente e , em seguida, Expression será testado novamente. Para obter mais informações sobre a sintaxe, consulte Sintaxe de expressão numérica.

Ambiente

Item Descrição
Modos Modo de usuário, modo kernel
Destinos Ao vivo, despejo de memória
Plataformas Tudo

Comentários

Em muitos comandos de depurador, o ponto e vírgula é usado para separar comandos não relacionados. No entanto, no comando z , um ponto e vírgula separa o "z" do parâmetro Command .

O comando Command sempre é executado pelo menos uma vez e, em seguida, Expression é testado. Se a condição for um valor diferente de zero, o comando será executado novamente e, em seguida, Expression será testado novamente. (Esse comportamento é semelhante a uma linguagem C – enquanto loop, não um loop while simples.)

Se houver vários ponto-e-vírgula à esquerda do "z", todos os comandos à esquerda da repetição "z" desde que a condição Expression seja verdadeira. Esses comandos podem ser comandos de depurador que permitam um ponto e vírgula do terminal.

Se você adicionar outro ponto e vírgula e comandos adicionais após o comando z , esses comandos adicionais serão executados após a conclusão do loop. Normalmente, não recomendamos uma linha que comece com "z" porque ela gera saída sem interesse para sempre, a menos que a condição se torne falsa devido a alguma outra ação. Observe que você pode aninhar comandos z .

Para quebrar um loop que continua por muito tempo, use CTRL+C em CDB ou KD ou use Depurar | Interrompa o menu ou CTRL+BREAK no WinDbg.

O exemplo de código a seguir mostra uma maneira desnecessariamente complexa de zerar o registro eax .

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

O exemplo a seguir incrementa os registros eax e ebx até que um deles seja pelo menos 8 e incremente o registro ecx uma vez.

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

O exemplo a seguir usa a sintaxe de expressão C++ e usa o pseudo-registro $t 0 como uma variável de loop.

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 )

Confira também

j (Execute If-Else)