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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de