다중 프로세서 구문

KD 및 커널 모드 WinDbg는 여러 프로세서 디버깅을 지원합니다. 모든 다중 프로세서 플랫폼에서 이러한 종류의 디버깅을 수행할 수 있습니다.

프로세서 번호는 0부터 n까지입니다.

현재 프로세서가 프로세서 0인 경우(즉, 현재 디버거가 활성화된 프로세서인 경우) 다른 비전류 프로세서(프로세서 1~ n)를 검사할 수 있습니다. 그러나 현재가 아닌 프로세서에서는 아무것도 변경할 수 없습니다. 해당 상태만 볼 수 있습니다.

프로세서 선택

.echocpunum(CPU 번호 표시) 명령을 사용하여 현재 프로세서의 프로세서 번호를 표시할 수 있습니다. 이 명령의 출력을 사용하면 커널 디버깅 프롬프트의 텍스트로 여러 프로세서 시스템에서 작업할 때 즉시 알 수 있습니다.

다음 예제에서 0:kd> 프롬프트 앞에 컴퓨터의 첫 번째 프로세서를 디버깅 중임을 나타냅니다.

0: kd>

다음 예제와 같이 ~s(현재 프로세서 변경) 명령을 사용하여 프로세서 간에 전환합니다.

0: kd> ~1s
1: kd>

이제 컴퓨터에서 두 번째 프로세서를 디버깅하고 있습니다.

중단이 발생하여 스택 추적을 이해할 수 없는 경우 다중 프로세서 시스템에서 프로세서를 변경해야 할 수 있습니다. 다른 프로세서에서 중단이 발생했을 수 있습니다.

다른 명령에서 프로세서 지정

여러 명령 앞에 프로세서 번호를 추가할 수 있습니다. ~S 명령을 제외하고 이 숫자 앞에는 타일(~)이 없습니다.

참고 사용자 모드 디버깅에서 타일은 스레드를 지정하는 데 사용됩니다. 이 구문에 대한 자세한 내용은 스레드 구문을 참조하세요.

프로세서 ID를 명시적으로 참조할 필요가 없습니다. 대신 프로세서 ID에 해당하는 정수로 확인되는 숫자 식을 사용할 수 있습니다. 식이 프로세서로 해석되어야 함을 나타내려면 다음 구문을 사용합니다.

||[Expression]

이 구문에서는 대괄호가 필요하며 Expression 은 프로세서 ID에 해당하는 정수로 확인되는 모든 숫자 식을 의미합니다.

다음 예제에서 프로세서는 사용자 정의 의사 레지스터의 값에 따라 변경됩니다.

||[@$t0]

예제

다음 예제에서는 k(Stack Backtrace 표시) 명령을 사용하여 프로세서 2의 스택 추적을 표시합니다.

1: kd> 2k 

다음 예제에서는 r(Registers) 명령을 사용하여 프로세서 3의 eax 레지스터를 표시합니다.

1: kd> 3r eax 

그러나 다음 명령은 현재 프로세서가 아닌 프로세서의 상태를 변경할 수 없으므로 구문 오류를 제공합니다.

1: kd> 3r eax=808080 

중단점

커널 디버깅 중에 bp, bu, bm(중단점 설정)ba(액세스 중단) 명령이 여러 프로세서 컴퓨터의 모든 프로세서에 적용됩니다.

예를 들어 현재 프로세서가 3인 경우 다음 명령을 입력하여 SomeAddress에 중단점을 배치할 수 있습니다.

1: kd> bp SomeAddress 

그런 다음, 해당 주소에서 실행되는 프로세서(프로세서 1뿐만 아니라)는 중단점 트랩을 발생합니다.

프로세서 정보 표시

!running 확장을 사용하여 대상 컴퓨터에서 각 프로세서의 상태 표시할 수 있습니다. 각 프로세서에 대해 !running 은 PRCB(프로세스 제어 블록), 16개의 기본 제공 대기 스핀 잠금 상태 및 스택 추적의 현재 및 다음 스레드 필드를 표시할 수도 있습니다.

!cpuinfo!cpuid 확장을 사용하여 프로세서 자체에 대한 정보를 표시할 수 있습니다.