z(Execute While)
z 명령은 지정된 조건이 true인 동안 명령을 실행합니다.
사용자 모드
Command ; z( Expression )
커널 모드
Command ; [Processor] z( Expression )
매개 변수
명령
식 조건이 0이 아닌 값으로 계산되는 동안 실행할 명령을 지정합니다. 이 명령은 항상 한 번 이상 실행됩니다.
프로세서
테스트에 적용되는 프로세서를 지정합니다. 구문에 대한 자세한 내용은 다중 프로세서 구문을 참조하세요. 커널 모드에서만 프로세서를 지정할 수 있습니다.
식
테스트할 조건을 지정합니다. 이 조건이 0이 아닌 값 으로 평가되면 명령 명령이 다시 실행된 다음 식 이 다시 테스트됩니다. 구문에 대한 자세한 내용은 숫자 식 구문을 참조 하세요.
환경
항목 | 설명 |
---|---|
모드 | 사용자 모드, 커널 모드 |
대상 | 라이브, 크래시 덤프 |
플랫폼 | 모두 |
설명
많은 디버거 명령에서 세미콜론은 관련 없는 명령을 구분하는 데 사용됩니다. 그러나 z 명령에서 세미콜론은 "z"를 Command 매개 변수와 구분합니다.
명령 명령은 항상 한 번 이상 실행된 다음 식이 테스트됩니다. 조건이 0이 아닌 값이면 명령이 다시 실행된 다음 식 이 다시 테스트됩니다. (이 동작은 C-language do와 유사하지만 단순 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 )