다음을 통해 공유


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)

다음 예제에서는 eaxebx 레지스터 중 하나가 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)