다음을 통해 공유


IDebugControl4::GetContextStackTrace 메서드(dbgeng.h)

GetContextStackTrace 메서드는 임의의 레지스터 컨텍스트에서 시작하여 각 스택 프레임에 대해 재구성된 레지스터 컨텍스트를 반환하여 호출 스택 맨 위에 있는 프레임을 반환합니다.

구문

HRESULT GetContextStackTrace(
  [in, optional]  PVOID              StartContext,
  [in]            ULONG              StartContextSize,
  [out, optional] PDEBUG_STACK_FRAME Frames,
  [in]            ULONG              FramesSize,
  [out, optional] PVOID              FrameContexts,
  [in]            ULONG              FrameContextsSize,
  [in]            ULONG              FrameContextsEntrySize,
  [out, optional] PULONG             FramesFilled
);

매개 변수

[in, optional] StartContext

스택 맨 위에 대한 레지스터 컨텍스트를 지정합니다.

[in] StartContextSize

StartContext 레지스터 컨텍스트의 크기(바이트)를 지정합니다.

[out, optional] Frames

스택 프레임을 받습니다. 이 배열이 보유하는 요소의 수는 FrameSize입니다. Frames가NULL이면 이 정보가 반환되지 않습니다.

[in] FramesSize

배열 프레임의 항목 수를 지정 합니다.

[out, optional] FrameContexts

스택의 각 프레임에 대해 재구성된 레지스터 컨텍스트를 받습니다. 이 배열의 항목은 Frames 배열의 항목에 해당합니다. 스레드 컨텍스트의 형식은 대상의 유효 프로세서에 대한 CONTEXT 구조입니다. FrameContextsNULL이면 이 정보가 반환되지 않습니다.

[in] FrameContextsSize

FrameContexts가 가리키는 메모리의 크기(바이트)를 지정합니다. 반환되는 스택 프레임 수는 반환된 컨텍스트 수와 같으며 FrameContextsSize는 FramesSize 시간 FrameContextsEntrySize와 같아야 합니다.

[in] FrameContextsEntrySize

FrameContexts에서 각 프레임 컨텍스트의 크기(바이트)를 지정합니다.

[out, optional] FramesFilled

FrameContexts의 배열 Frame 및 컨텍스트에 배치된 프레임 수를 받습니다. FramesFilledNULL이면 이 정보가 반환되지 않습니다.

반환 값

반환 코드 Description
S_OK
메서드를 성공적으로 수행했습니다.
 

이 메서드는 오류 값을 반환할 수도 있습니다. 자세한 내용은 반환 값을 참조하세요.

설명

FramesFrameContexts로 반환된 스택 추적은 OutputContextStackTrace를 사용하여 인쇄할 수 있습니다.

스택 해제는 레지스터의 하위 집합만 복원하는 것이 일반적입니다. 예를 들어 일시적 레지스터는 스크래치 레지스터이고 코드는 이를 보존할 필요가 없으므로 스택 해제가 항상 휘발성 레지스터 상태를 복원하지는 않습니다. 해제 시 복원되지 않은 레지스터는 복원된 마지막 값으로 남아 있으므로 해제에 의해 복원되지 않을 수 있는 레지스터 상태를 사용할 때는 주의해야 합니다.

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 dbgeng.h(Dbgeng.h, Ntddk.h 포함)

추가 정보

GetStackTrace

IDebugControl4

OutputContextStackTrace

k, kb, kc, kd, kp, kP, kv(Display Stack Backtrace)