Поделиться через


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

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

Режим пользователя

Command ; z( Expression ) 

Режим ядра

Command ; [Processor] z( Expression )

Параметры

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

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

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

Среда

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

Замечания

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

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

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

Если добавить еще одну точку с запятой и дополнительные команды после команды z , эти дополнительные команды выполняются после завершения цикла. Обычно не рекомендуется использовать строку, которая начинается с "z", так как она создает неинтересные выходные данные навсегда, если условие не становится ложным из-за какого-либо другого действия. Обратите внимание, что можно вложить команды 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 (Execute If-Else)