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 매개 변수는 ICorProfilerInfo2::DoStackSnapshot에 COR_PRF_SNAPSHOT_CONTEXT 플래그가 전달된 경우에만 유효합니다.
clientData
[in] ICorProfilerInfo2::DoStackSnapshot에서 직접 전달되는 클라이언트 데이터에 대한 포인터입니다.
설명
StackSnapshotCallback 함수는 프로파일러 작성기에서 구현됩니다. StackSnapshotCallback에서 수행되는 작업의 복잡성을 제한해야 합니다. 예를 들어 비동기 방식으로 ICorProfilerInfo2::DoStackSnapshot을 사용하는 경우 대상 스레드에 잠금이 설정될 수 있습니다. StackSnapshotCallback 내의 코드에서 같은 잠금을 사용해야 할 경우 교착 상태가 발생할 수 있습니다.
ICorProfilerInfo2::DoStackSnapshot 메서드는 관리되는 프레임마다 또는 관리되지 않는 프레임을 실행할 때마다 한 번씩 StackSnapshotCallback 함수를 호출합니다. StackSnapshotCallback이 관리되지 않는 프레임의 실행에 대해 호출되면 프로파일러에서는 context 매개 변수에서 참조하는 레지스터 컨텍스트를 사용하여 관리되지 않는 자체 스택 워크를 수행합니다. 이 경우 Win32 CONTEXT 구조체는 관리되지 않는 프레임이 실행되는 동안 가장 최근에 푸시된 프레임의 CPU 상태를 나타냅니다. Win32 CONTEXT 구조체에는 모든 레지스터에 대한 값이 포함되지만 스택 포인터 레지스터, 프레임 포인터 레지스터, 명령 포인터 레지스터 및 보존되는 비휘발성 정수 레지스터의 값만 사용해야 합니다.
요구 사항
플랫폼: .NET Framework 시스템 요구 사항 참조
헤더: CorProf.idl
라이브러리: CorGuids.lib
.NET Framework 버전: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0
참고 항목
참조
ICorProfilerInfo2::DoStackSnapshot 메서드