다음을 통해 공유


StackSnapshotCallback 함수

ICorProfilerInfo2::DoStackSnapshot 메서드에 의해 시작되는 스택 워크 동안 스택에서 각 관리 프레임 및 각 비관리 프레임 실행에 대한 정보를 프로파일러에 제공합니다.

구문

HRESULT __stdcall StackSnapshotCallback (  
    [in] FunctionID funcId,  
    [in] UINT_PTR ip,  
    [in] COR_PRF_FRAME_INFO frameInfo,  
    [in] ULONG32 contextSize,  
    [in] BYTE context[],  
    [in] void *clientData  
);  

매개 변수

funcId
[in] 이 값이 0인 경우 이는 비관리 프레임 실행에 대한 콜백입니다. 그렇지 않으면 관리되는 함수의 식별자이며 관리 프레임에 대한 콜백입니다.

ip
[in] 프레임에 있는 네이티브 코드 명령 포인터의 값입니다.

frameInfo
[in] 스택 프레임에 대한 정보를 참조하는 COR_PRF_FRAME_INFO 값입니다. 이 값은 이 콜백 중에만 사용할 수 있습니다.

contextSize
[in] context 매개 변수에서 참조하는 CONTEXT 구조체의 크기입니다.

context
[in] 이 프레임의 CPU 상태를 나타내는 Win32 CONTEXT 구조체에 대한 포인터입니다.

context 매개 변수는 COR_PRF_SNAPSHOT_CONTEXT 플래그가 ICorProfilerInfo2::DoStackSnapshot에서 전달된 경우에만 유효합니다.

clientData
[in] ICorProfilerInfo2::DoStackSnapshot에서 직접 전달되는 클라이언트 데이터에 대한 포인터입니다.

설명

StackSnapshotCallback 함수는 프로파일러 작성기에 의해 구현됩니다. StackSnapshotCallback에서 수행되는 작업의 복잡성을 제한해야 합니다. 예를 들어, 비동기 방식으로 ICorProfilerInfo2::DoStackSnapshot을 사용하는 경우 대상 스레드가 잠금을 유지하고 있을 수 있습니다. StackSnapshotCallback 내의 코드에 동일한 잠금이 필요한 경우 교착 상태가 발생할 수 있습니다.

ICorProfilerInfo2::DoStackSnapshot 메서드는 관리 프레임당 한 번 또는 비관리 프레임 실행당 한 번 StackSnapshotCallback 함수를 호출합니다. 비관리 프레임 실행에 대해 StackSnapshotCallback이 호출되면 프로파일러는 레지스터 컨텍스트(context 매개 변수로 참조됨)를 사용하여 자체 비관리 스택 워크를 수행할 수 있습니다. 이 경우 Win32 CONTEXT 구조체는 비관리 프레임 실행 내에서 가장 최근에 푸시된 프레임의 CPU 상태를 나타냅니다. Win32 CONTEXT 구조체는 모든 레지스터에 대한 값을 포함하지만 스택 포인터 레지스터, 프레임 포인터 레지스터, 명령 포인터 레지스터 및 비휘발성(즉, 보존된) 정수 레지스터의 값에만 의존해야 합니다.

요구 사항

플랫폼:시스템 요구 사항을 참조하세요.

헤더: CorProf.idl

라이브러리: CorGuids.lib

.NET Framework 버전: 1.0부터 사용 가능

참고 항목