z (выполнить время)

Команда z выполняет команду, когда заданное условие имеет значение true.

User-Mode

Command ; z( Expression ) 

Kernel-Mode

Command ; [Processor] z( Expression )

Параметры

Команды
Указывает команду, выполняемую в то время как условие expression принимает ненулевое значение. Эта команда всегда выполняется по крайней мере один раз.

Процессор
Указывает процессор, который применяется к тесту. Дополнительные сведения о синтаксисе см. в разделе Многопроцессорный синтаксис. Процессоры можно указать только в режиме ядра.

Выражение
Указывает условие для проверки. Если это условие имеет ненулевое значение, команда Command выполняется снова, а затем выражение проверяется снова. Дополнительные сведения о синтаксисе см. в разделе Синтаксис числовых выражений.

Среда

Элемент Описание
Режимы Пользовательский режим, режим ядра
Цели Динамический аварийный дамп
Платформы Все

Комментарии

Во многих командах отладчика точка с запятой используется для разделения несвязанных команд. Однако в команде z точка с запятой отделяет "z" от параметра Command .

Команда Command всегда выполняется по крайней мере один раз, а затем выполняется проверка выражения . Если условие не равно нулю, команда снова выполняется, а затем снова проверяется выражение . (Это поведение аналогично циклу "Делать на языке C " — пока , а не простому циклу while .)

Если слева от буквы "z" имеется несколько знаков с запятой, все команды слева от "z" повторяются, если условие выражения истинно. Такими командами могут быть любые команды отладчика, допускающие точку с запятой терминала.

Если добавить еще одну точку с запятой и дополнительные команды после команды z , эти дополнительные команды будут выполняться после завершения цикла. Обычно не рекомендуется использовать строку, которая начинается с "z", так как она создает неинтересные выходные данные навсегда, если условие не станет false из-за какого-либо другого действия. Обратите внимание, что можно вкладывать команды z .

Чтобы разорвать цикл, который продолжается слишком долго, нажмите клавиши CTRL+C в CDB или KD или отладка | Прервать из меню или ctrl+BREAK в WinDbg.

В следующем примере кода показан неоправданно сложный способ обнулить регистр eax .

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

В следующем примере регистр eax и ebx увеличивается до тех пор, пока один из них не равен не менее 8, а затем увеличивает регистр ECX один раз.

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

В следующем примере используется синтаксис выражений C++ и псевдорегистративная $t 0 в качестве переменной цикла.

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 )

См. также

j (выполнение if-Else)