레지스터

디버거 엔진을 사용하여 대상의 레지스터를 검사하고 변경할 수 있습니다.

대상에서 사용할 수 있는 레지스터는 프로세서 아키텍처에 따라 달라집니다. x86 프로세서의 레지스터에 대한 설명은 프로세서 아키텍처를 참조하세요. 프로세서에 사용할 수 있는 레지스터에 대한 전체 설명은 해당 프로세서의 설명서를 참조하세요.

레지스터 집합

GetNumberRegisters 메서드를 사용하여 대상의 레지스터 수를 찾을 수 있습니다.

각 레지스터는 인덱스로 참조됩니다. 첫 번째 레지스터의 인덱스는 0이고 마지막 레지스터의 인덱스는 레지스터 수에서 1을 뺀 값입니다. 이름이 알려진 레지스터의 인덱스를 찾으려면 GetIndexByName을 사용합니다.

GetDescription 메서드는 레지스터에 대한 정보를 반환합니다. 여기에는 레지스터의 이름, 보유할 수 있는 값의 형식 및 하위 등록자인지 여부가 포함됩니다.

하위 등록은 다른 레지스터 내에 포함된 레지스터입니다. 하위 등록이 변경되면 하위 등록이 포함된 레지스터도 변경됩니다. 예를 들어 x86 프로세서에서 ax 하위 등록은 32비 트 eax 레지스터의 낮은 16비트와 동일합니다.

다음 메서드를 사용하여 값을 찾을 수 있는 세 개의 특수 레지스터가 있습니다. 이러한 레지스터의 값 해석은 플랫폼에 따라 다릅니다.

레지스터 조작

GetValue 메서드를 사용하여 레지스터의 값을 읽을 수 있습니다. GetValuesGetValues2를 사용하여 여러 레지스터를 읽을 수 있습니다.

SetValue 메서드를 사용하여 레지스터에 값을 쓸 수 있습니다. SetValues 및 SetValues2를 사용하여 여러 레지스터를 작성할 수 있습니다.

레지스터에 값을 쓸 때 제공된 값의 형식이 레지스터 형식과 다른 경우 해당 값은 레지스터의 형식으로 변환됩니다. 이 변환은 메서드 CoerceValue에서 수행하는 것과 동일합니다. 레지스터의 형식이 제공된 값을 보유할 수 없는 경우 이 변환으로 인해 데이터가 손실 될 수 있습니다.

Pseudo-Registers

의사 레지스터 는 특정 값을 보유하는 디버거 엔진에서 유지 관리하는 변수입니다. 예를 들어 $teb 값이 현재 스레드의 TEB(스레드 환경 블록)의 주소인 의사 레지스터의 이름입니다. 자세한 내용과 의사 레지스터 목록은 의사 등록 구문을 참조하세요.

각 의사 레지스터에는 인덱스가 있습니다. 인덱스는 0과 의사 레지스터 수 사이의 숫자입니다( GetNumberPseudoRegisters에서 반환됨)에서 1을 뺀 값입니다. 이름으로 의사 레지스터의 인덱스를 찾으려면 GetPseudoIndexByName을 사용합니다. 의사 레지스터의 값은 GetPseudoValues를 사용하여 읽을 수 있으며 SetPseudoValues를 사용하여 의사 레지스터에 값을 쓸 수 있습니다. 형식을 포함하여 의사 레지스터에 대한 설명은 GetPseudoDescription을 사용합니다.

참고 모든 의사 레지스터는 모든 디버깅 세션 또는 특정 세션에서 항상 사용할 수 있는 것은 아닙니다.

레지스터 표시

OutputRegistersOutputRegisters2 메서드는 대상의 레지스터 형식을 지정하고 출력으로 클라이언트에 보냅니다.

이벤트

대상 레지스터의 값이 변경될 때마다 엔진은 플래그가 DEBUG_CDS_REGISTERS 설정된 매개 변수를 사용하여 IDebugEventCallbacks::ChangeDebuggeeState 콜백 메서드를 호출합니다.