비관리 코드와 관리 코드 사이를 전환할 때마다 관리되는 스택 추적과 CONTEXT 레코드 배열의 텍스트 표현을 하나씩 제공합니다.
HRESULT CALLBACK _EFN_StackTrace(
[in] PDEBUG_CLIENT Client,
[out] WCHAR wszTextOut[],
[out] size_t *puiTextLength,
[out] LPVOID pTransitionContexts,
[out] size_t *puiTransitionContextCount,
[in] size_t uiSizeOfContext,
[in] DWORD Flags
);
매개 변수
Client
[in] 디버깅되는 클라이언트입니다.wszTextOut
[out] 스택 추적의 텍스트 표현입니다.puiTextLength
[out] wszTextOut의 문자 수에 대한 포인터입니다.pTransitionContexts
[out] 전환 컨텍스트 배열입니다.puiTransitionContextCount
[out] 배열의 전환 컨텍스트 수에 대한 포인터입니다.uiSizeOfContext
[in] 컨텍스트 구조체의 크기입니다.Flags
[in] 각 module!functionname 줄 앞에 EBP 레지스터와 ESP(Enter Stack Pointer)를 표시하려면 0이나 SOS_STACKTRACE_SHOWADDRESSES(0x01)로 설정합니다.
설명
_EFN_StackTrace 구조체는 WinDbg라는 프로그래밍 방식 인터페이스에서 호출될 수 있습니다. 매개 변수는 다음과 같이 사용됩니다.
wszTextOut이 null이고 puiTextLength가 null이 아니면 함수는 puiTextLength의 문자열 길이를 반환합니다.
wszTextOut이 null이 아니면 함수는 puiTextLength가 나타내는 위치까지 wszTextOut에 텍스트를 저장합니다. 버퍼에 여유 공간이 있으면 결과를 성공적으로 반환하고 버퍼에 여유 공간이 없으면 E_OUTOFMEMORY를 반환합니다.
pTransitionContexts 및 puiTransitionContextCount가 모두 null이면 함수의 전환 부분이 무시됩니다. 이 경우 함수는 호출자에게 함수 이름으로만 구성된 텍스트 출력을 제공합니다.
pTransitionContexts가 null이고 puiTransitionContextCount가 null이 아니면 함수는 puiTransitionContextCount에 있는 필요한 컨텍스트 항목 수를 반환합니다.
pTransitionContexts가 null이 아니면 함수는 해당 배열을 길이가 puiTransitionContextCount인 구조체의 배열로 처리합니다. 구조체 크기는 uiSizeOfContext로 제공되고 아키텍처에 대한 SimpleContext 또는 CONTEXT의 크기여야 합니다.
wszTextOut은 다음 형식으로 작성됩니다.
"<ModuleName>!<Function Name>[+<offset in hex>] ... (TRANSITION) ..."
16진 오프셋이 0x0이면 오프셋이 작성되지 않습니다.
현재 컨텍스트에 있는 스레드에 관리 코드가 없으면 함수는 SOS_E_NOMANAGEDCODE를 반환합니다.
Flags 매개 변수는 각 module!functionname 줄 앞에 EBP 및 ESP를 표시하도록 SOS_STACKTRACE_SHOWADDRESSES이거나 0입니다. 기본적으로 이 값은 0입니다.
#define SOS_STACKTRACE_SHOWADDRESSES 0x00000001
요구 사항
플랫폼: .NET Framework 시스템 요구 사항 참조
헤더: SOS_Stacktrace.h
.NET Framework 버전: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0