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 )
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по