更新 : 2007 年 11 月
コード プロファイラが共通言語ランタイム (CLR: Common Language Runtime) とやり取りして、イベント監視および要求情報を制御するために使用する各種メソッドを提供します。ICorProfilerInfo2 インターフェイスは、ICorProfilerInfo の機能を拡張するインターフェイスです。つまり、.NET Framework Version 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);
}
メソッド
メソッド |
説明 |
---|---|
指定したスレッドのスタックを走査して、マネージ呼び出しフレームをプロファイラに報告します。 |
|
指定したモジュール内の固定オブジェクトの反復処理を実行できる列挙子を取得します。 |
|
指定したアプリケーション ドメインのスコープ内にある、指定したアプリケーション ドメイン内静的フィールドのアドレスを取得します。 |
|
配列オブジェクトの詳細情報を取得します。 |
|
指定したボックス化済み値型のクラス レイアウトに関する情報を取得します。 |
|
指定したメタデータ トークンおよび任意の型引数の ClassID 値を使用して、型の ClassID を取得します。 |
|
指定したジェネリック クラスの親モジュール、そのクラスのメタデータ トークン、その親クラスの ClassID、およびそのクラスの型引数が存在する場合はそれぞれの ClassID を取得します。 |
|
指定したクラスで定義されるフィールドのメモリ内レイアウトに関する情報を取得します。つまり、このメソッドはクラスのフィールドのオフセットを取得します。 |
|
指定した FunctionID に関連付けられているネイティブ コードの範囲を取得します。 |
|
指定したコンテキストのスコープ内にある、指定したコンテキスト内静的フィールドのアドレスを取得します。 |
|
指定したメタデータ トークン、関数を含むクラス、および任意の型引数の ClassID 値を使用して、関数の FunctionID を取得します。 |
|
関数の親クラス、メタデータ トークン、および型引数が存在する場合はそれぞれの ClassID を取得します。 |
|
ガベージ コレクトされたヒープの生成を実行するメモリ領域 (ヒープのセグメント) を取得します。 |
|
実行されようとしているか実行されたばかりの exception 句 (catch、finally、filter) のネイティブ アドレスおよびフレーム情報を取得します。 |
|
指定したオブジェクトが格納されているヒープのセグメントを取得します。 |
|
指定された相対仮想アドレス (RVA: Relative Virtual Address) 静的フィールドのアドレスを取得します。 |
|
指定したフィールドが静的であるスコープを取得します。 |
|
文字列オブジェクトのレイアウトに関する情報を取得します。 |
|
指定したスレッドが現在コードを実行しているアプリケーション ドメインの ID を取得します。 |
|
指定したスレッドのスコープ内にある、指定したスレッド内静的フィールドのアドレスを取得します。 |
|
マネージ関数の "enter"、"leave"、および "tailcall" の各フックで呼び出される、プロファイラによって実装される関数を指定します。 |
解説
プロファイラは ICorProfilerInfo2 インターフェイスのメソッドを呼び出して、イベント監視および要求情報を制御するために CLR とやり取りします。
ICorProfilerInfo2 インターフェイスのメソッドは、フリー スレッド モデルを使用して CLR によって実装されます。各メソッドは、成功または失敗を示す HRESULT を返します。返される可能性があるリターン コードの一覧については、CorError.h ファイルを参照してください。
CLR は、プロファイラの ICorProfilerCallback::Initialize の実装を使用して、初期化中に 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