Compartilhar via


z (Executar Enquanto)

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

Modo de usuário

Command ; z( Expression ) 

Modo kernel

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. Este 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 multiprocessador. 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 do 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 um loop do - while da linguagem C, não um loop while simples.)

Se houver vários ponto-e-vírgula à esquerda do "z", todos os comandos à esquerda do "z" serão repetidos, desde que a condição Expression seja verdadeira. Esses comandos podem ser qualquer comando do depurador que permita um ponto-e-vírgula de 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 começa com "z" porque gera uma saída desinteressante 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 interromper um loop que continua por muito tempo, use CTRL+C no CDB ou KD ou use Depurar | Interrompa no 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 tenha pelo menos 8 e, em seguida, incrementa 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 (Executar If-Else)