업데이트: 2007년 11월
코드 프로파일러가 이벤트 모니터링 및 요청 정보를 제어하기 위해 CLR(공용 언어 런타임)과 통신할 때 사용하는 메서드를 제공합니다. ICorProfilerInfo2 인터페이스는 ICorProfilerInfo 인터페이스를 확장한 것입니다. 즉, 이 인터페이스는 .NET Framework 버전 2.0 이상에서 지원되는 새로운 메서드를 제공합니다.
interface ICorProfilerInfo2 : ICorProfilerInfo
{
HRESULT DoStackSnapshot(
[in] ThreadID thread,
[in] StackSnapshotCallback *callback,
[in] ULONG32 infoFlags,
[in] void *clientData,
[in, size_is(contextSize), length_is(contextSize)] BYTE context[],
[in] ULONG32 contextSize);
HRESULT SetEnterLeaveFunctionHooks2(
[in] FunctionEnter2 *pFuncEnter,
[in] FunctionLeave2 *pFuncLeave,
[in] FunctionTailcall2 *pFuncTailcall);
HRESULT GetFunctionInfo2(
[in] FunctionID funcId,
[in] COR_PRF_FRAME_INFO frameInfo,
[out] ClassID *pClassId,
[out] ModuleID *pModuleId,
[out] mdToken *pToken,
[in] ULONG32 cTypeArgs,
[out] ULONG32 *pcTypeArgs,
[out] ClassID typeArgs[]);
HRESULT GetStringLayout(
[out] ULONG *pBufferLengthOffset,
[out] ULONG *pStringLengthOffset,
[out] ULONG *pBufferOffset);
HRESULT GetClassLayout(
[in] ClassID classID,
[in, out] COR_FIELD_OFFSET rFieldOffset[],
[in] ULONG cFieldOffset,
[out] ULONG *pcFieldOffset,
[out] ULONG *pulClassSize);
HRESULT GetClassIDInfo2(
[in] ClassID classId,
[out] ModuleID *pModuleId,
[out] mdTypeDef *pTypeDefToken,
[out] ClassID *pParentClassId,
[in] ULONG32 cNumTypeArgs,
[out] ULONG32 *pcNumTypeArgs,
[out] ClassID typeArgs[]);
HRESULT GetCodeInfo2(
[in] FunctionID functionID,
[in] ULONG32 cCodeInfos,
[out] ULONG32 *pcCodeInfos,
[out, size_is(cCodeInfos), length_is(*pcCodeInfos)]
COR_PRF_CODE_INFO codeInfos[]);
HRESULT GetClassFromTokenAndTypeArgs(
[in] ModuleID moduleID,
[in] mdTypeDef typeDef,
[in] ULONG32 cTypeArgs,
[in, size_is(cTypeArgs)] ClassID typeArgs[],
[out] ClassID* pClassID);
HRESULT GetFunctionFromTokenAndTypeArgs(
[in] ModuleID moduleID,
[in] mdMethodDef funcDef,
[in] ClassID classId,
[in] ULONG32 cTypeArgs,
[in, size_is(cTypeArgs)] ClassID typeArgs[],
[out] FunctionID* pFunctionID);
HRESULT EnumModuleFrozenObjects(
[in] ModuleID moduleID,
[out] ICorProfilerObjectEnum** ppEnum);
HRESULT GetArrayObjectInfo(
[in] ObjectID objectId,
[in] ULONG32 cDimensions,
[out, size_is(cDimensions), length_is(cDimensions)] ULONG32 pDimensionSizes[],
[out, size_is(cDimensions), length_is(cDimensions)] int pDimensionLowerBounds[],
[out] BYTE **ppData);
HRESULT GetBoxClassLayout(
[in] ClassID classId,
[out] ULONG32 *pBufferOffset);
HRESULT GetThreadAppDomain(
[in] ThreadID threadId,
[out] AppDomainID *pAppDomainId);
HRESULT GetRVAStaticAddress(
[in] ClassID classId,
[in] mdFieldDef fieldToken,
[out] void **ppAddress);
HRESULT GetAppDomainStaticAddress(
[in] ClassID classId,
[in] mdFieldDef fieldToken,
[in] AppDomainID appDomainId,
[out] void **ppAddress);
HRESULT GetThreadStaticAddress(
[in] ClassID classId,
[in] mdFieldDef fieldToken,
[in] ThreadID threadId,
[out] void **ppAddress);
HRESULT GetContextStaticAddress(
[in] ClassID classId,
[in] mdFieldDef fieldToken,
[in] ContextID contextId,
[out] void **ppAddress);
HRESULT GetStaticFieldInfo(
[in] ClassID classId,
[in] mdFieldDef fieldToken,
[out] COR_PRF_STATIC_TYPE *pFieldInfo);
HRESULT GetGenerationBounds(
[in] ULONG cObjectRanges,
[out] ULONG *pcObjectRanges,
[out, size_is(cObjectRanges), length_is(*pcObjectRanges)] COR_PRF_GC_GENERATION_RANGE ranges[]);
HRESULT GetObjectGeneration(
[in] ObjectID objectId,
[out] COR_PRF_GC_GENERATION_RANGE *range);
HRESULT GetNotifiedExceptionClauseInfo(
[out] COR_PRF_EX_CLAUSE_INFO *pinfo);
}
메서드
메서드 |
설명 |
|---|---|
지정된 스레드의 스택을 탐색하여 프로파일러에 관리되는 호출 프레임을 보고합니다. |
|
지정된 모듈에서 고정된 개체를 반복할 수 있는 열거자를 가져옵니다. |
|
지정된 응용 프로그램 도메인의 범위에 있는 특정 응용 프로그램 도메인에 정적인 필드의 주소를 가져옵니다. |
|
배열 개체에 대한 자세한 정보를 가져옵니다. |
|
지정된 boxed 값 형식의 클래스 레이아웃에 대한 정보를 가져옵니다. |
|
지정된 메타데이터 토큰과 형식 인수의 ClassID 값을 사용하여 형식의 ClassID를 가져옵니다. |
|
지정된 제네릭 클래스의 부모 모듈, 해당 클래스의 메타데이터 토큰, 부모 클래스의 ClassID 및 클래스의 각 형식 인수에 대한 ClassID(있는 경우)를 가져옵니다. |
|
지정된 클래스에서 정의한 필드의 메모리 내 레이아웃에 대한 정보를 가져옵니다. 즉, 이 메서드는 클래스의 필드 오프셋을 가져옵니다. |
|
지정한 FunctionID에 연결된 네이티브 코드의 익스텐트를 가져옵니다. |
|
지정된 컨텍스트의 범위에 있는 특정 컨텍스트에 정적인 필드의 주소를 가져옵니다. |
|
지정된 메타데이터 토큰, 포함 클래스 및 형식 인수의 ClassID 값을 사용하여 함수의 FunctionID를 가져옵니다. |
|
함수에 대한 부모 클래스, 메타데이터 토큰 및 각 형식 인수의 ClassID(있을 경우)를 가져옵니다. |
|
가비지 수집된 힙의 세대를 구성하는 메모리 영역(힙의 세그먼트)을 가져옵니다. |
|
곧 실행할 예외 절(catch/finally/filter) 또는 방금 실행한 예외 절에 대한 네이티브 주소 및 프레임 정보를 가져옵니다. |
|
지정된 개체가 들어 있는 힙의 세그먼트를 가져옵니다. |
|
지정된 RVA(상대 가상 주소) 정적 필드의 주소를 가져옵니다. |
|
지정된 필드가 정적 필드가 되는 범위를 지정합니다. |
|
문자열 개체의 레이아웃에 대한 정보를 가져옵니다. |
|
지정된 스레드에서 현재 코드를 실행하고 있는 응용 프로그램 도메인의 ID를 가져옵니다. |
|
지정된 스레드의 범위에 있는 특정 스레드에 정적인 필드의 주소를 가져옵니다. |
|
관리되는 함수의 "enter", "leave" 및 "tailcall" 후크에 대해 호출할 프로파일러 구현 함수를 지정합니다. |
설명
프로파일러에서는 CLR과 통신할 때 ICorProfilerInfo2 인터페이스의 메서드를 호출하여 이벤트 모니터링을 제어하고 정보를 요청합니다.
ICorProfilerInfo2 인터페이스의 메서드는 CLR에서 자유 스레드 모델을 사용하여 구현됩니다. 각 메서드는 성공 또는 실패를 나타내는 HRESULT를 반환합니다. 가능한 반환 코드의 목록을 보려면 CorError.h 파일을 참조하십시오.
프로파일러의 ICorProfilerCallback::Initialize 구현을 사용하여 CLR에서는 초기화 중에 각 코드 프로파일러에 ICorProfilerInfo2 인터페이스를 전달합니다. 그런 다음 코드 프로파일러에서는 ICorProfilerInfo2 인터페이스의 메서드를 호출하여 CLR의 제어에 따라 실행되는 관리 코드에 대한 정보를 얻을 수 있습니다.
요구 사항
플랫폼:.NET Framework 시스템 요구 사항 참조
헤더: CorProf.idl
라이브러리: CorGuids.lib
.NET Framework 버전: 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0