z(Execute While)
지정된 조건이 true인 동안 z 명령은 명령을 실행합니다.
User-Mode
Command ; z( Expression )
Kernel-Mode
Command ; [Processor] z( Expression )
매개 변수
명령
식 조건이 0이 아닌 값으로 계산되는 동안 실행할 명령을 지정합니다. 이 명령은 항상 한 번 이상 실행됩니다.
프로세서
테스트에 적용되는 프로세서를 지정합니다. 구문에 대한 자세한 내용은 다중 프로세서 구문을 참조하세요. 커널 모드에서만 프로세서를 지정할 수 있습니다.
식
테스트할 조건을 지정합니다. 이 조건이 0이 아닌 값으로 평가되면 Command 명령이 다시 실행되고 식 이 다시 테스트됩니다. 구문에 대한 자세한 내용은 숫자 식 구문을 참조하세요.
Environment
항목 | Description |
---|---|
모드 | 사용자 모드, 커널 모드 |
대상 | 라이브, 크래시 덤프 |
플랫폼 | 모두 |
설명
많은 디버거 명령에서 세미콜론은 관련 없는 명령을 구분하는 데 사용됩니다. 그러나 z 명령에서 세미콜론은 "z"를 Command 매개 변수와 구분합니다.
Command 명령은 항상 한 번 이상 실행된 다음 식이 테스트됩니다. 조건이 0이 아닌 값이면 명령이 다시 실행되고 식 이 다시 테스트됩니다. (이 동작은 C-language do와 유사합니다 . while 루프는 단순 while 루프가 아닙니다.)
"z"의 왼쪽에 세미콜론이 여러 대 있는 경우 식 조건이 true인 한 "z"의 왼쪽에 있는 모든 명령이 반복됩니다. 이러한 명령은 터미널 세미콜론을 허용하는 모든 디버거 명령일 수 있습니다.
z 명령 다음에 다른 세미콜론 및 추가 명령을 추가하면 루프가 완료된 후 이러한 추가 명령이 실행됩니다. 다른 작업으로 인해 조건이 false가 되지 않는 한 관심이 없는 출력을 영원히 생성하기 때문에 일반적으로 "z"로 시작하는 줄은 권장하지 않습니다. z 명령을 중첩할 수 있습니다.
너무 오랫동안 계속되는 루프를 중단하려면 CDB 또는 KD에서 CTRL+C 를 사용하거나 디버그 | 메뉴에서 중단 하거나 WinDbg에서 Ctrl+BREAK를 실행합니다.
다음 코드 예제에서는 eax 레지스터를 0으로 불필요하게 복잡한 방법을 보여줍니다.
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 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기