更新 : 2007 年 11 月
プロファイラがサブスクライブしたイベントが発生したときにコード プロファイラに通知するために共通言語ランタイム (CLR: Common Language Runtime) が使用するメソッドを提供します。
interface ICorProfilerCallback : IUnknown
{
HRESULT Initialize(
[in] IUnknown *pICorProfilerInfoUnk);
HRESULT Shutdown();
HRESULT AppDomainCreationStarted(
[in] AppDomainID appDomainId);
HRESULT AppDomainCreationFinished(
[in] AppDomainID appDomainId,
[in] HRESULT hrStatus);
HRESULT AppDomainShutdownStarted(
[in] AppDomainID appDomainId);
HRESULT AppDomainShutdownFinished(
[in] AppDomainID appDomainId,
[in] HRESULT hrStatus);
HRESULT AssemblyLoadStarted(
[in] AssemblyID assemblyId);
HRESULT AssemblyLoadFinished(
[in] AssemblyID assemblyId,
[in] HRESULT hrStatus);
HRESULT AssemblyUnloadStarted(
[in] AssemblyID assemblyId);
HRESULT AssemblyUnloadFinished(
[in] AssemblyID assemblyId,
[in] HRESULT hrStatus);
HRESULT ModuleLoadStarted(
[in] ModuleID moduleId);
HRESULT ModuleLoadFinished(
[in] ModuleID moduleId,
[in] HRESULT hrStatus);
HRESULT ModuleUnloadStarted(
[in] ModuleID moduleId);
HRESULT ModuleUnloadFinished(
[in] ModuleID moduleId,
[in] HRESULT hrStatus);
HRESULT ModuleAttachedToAssembly(
[in] ModuleID moduleId,
[in] AssemblyID AssemblyId);
HRESULT ClassLoadStarted(
[in] ClassID classId);
HRESULT ClassLoadFinished(
[in] ClassID classId,
[in] HRESULT hrStatus);
HRESULT ClassUnloadStarted(
[in] ClassID classId);
HRESULT ClassUnloadFinished(
[in] ClassID classId,
[in] HRESULT hrStatus);
HRESULT FunctionUnloadStarted(
[in] FunctionID functionId);
HRESULT JITCompilationStarted(
[in] FunctionID functionId,
[in] BOOL fIsSafeToBlock);
HRESULT JITCompilationFinished(
[in] FunctionID functionId,
[in] HRESULT hrStatus,
[in] BOOL fIsSafeToBlock);
HRESULT JITCachedFunctionSearchStarted(
[in] FunctionID functionId,
[out] BOOL *pbUseCachedFunction);
HRESULT JITCachedFunctionSearchFinished(
[in] FunctionID functionId,
[in] COR_PRF_JIT_CACHE result);
HRESULT JITFunctionPitched(
[in] FunctionID functionId);
HRESULT JITInlining(
[in] FunctionID callerId,
[in] FunctionID calleeId,
[out] BOOL *pfShouldInline);
HRESULT ThreadDestroyed(
[in] ThreadID threadId);
HRESULT ThreadAssignedToOSThread(
[in] ThreadID managedThreadId,
[in] DWORD osThreadId);
HRESULT RemotingClientInvocationStarted();
HRESULT RemotingClientSendingMessage(
[in] GUID *pCookie,
[in] BOOL fIsAsync);
HRESULT RemotingClientReceivingReply(
[in] GUID *pCookie,
[in] BOOL fIsAsync);
HRESULT RemotingClientInvocationFinished();
HRESULT RemotingServerReceivingMessage(
[in] GUID *pCookie,
[in] BOOL fIsAsync);
HRESULT RemotingServerInvocationStarted();
HRESULT RemotingServerInvocationReturned();
HRESULT RemotingServerSendingReply(
[in] GUID *pCookie,
[in] BOOL fIsAsync);
HRESULT UnmanagedToManagedTransition(
[in] FunctionID functionId,
[in] COR_PRF_TRANSITION_REASON reason);
HRESULT ManagedToUnmanagedTransition(
[in] FunctionID functionId,
[in] COR_PRF_TRANSITION_REASON reason);
HRESULT RuntimeSuspendStarted(
[in] COR_PRF_SUSPEND_REASON suspendReason);
HRESULT RuntimeSuspendFinished();
HRESULT RuntimeSuspendAborted();
HRESULT RuntimeResumeStarted();
HRESULT RuntimeResumeFinished();
HRESULT RuntimeThreadSuspended(
[in] ThreadID threadId);
HRESULT RuntimeThreadResumed(
[in] ThreadID threadId);
HRESULT MovedReferences(
[in] ULONG cMovedObjectIDRanges,
[in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ULONG cObjectIDRangeLength[] );
HRESULT ObjectAllocated(
[in] ObjectID objectId,
[in] ClassID classId);
HRESULT ObjectsAllocatedByClass(
[in] ULONG cClassCount,
[in, size_is(cClassCount)] ClassID classIds[] ,
[in, size_is(cClassCount)] ULONG cObjects[] );
HRESULT ObjectReferences(
[in] ObjectID objectId,
[in] ClassID classId,
[in] ULONG cObjectRefs,
[in, size_is(cObjectRefs)] ObjectID objectRefIds[] );
HRESULT RootReferences(
[in] ULONG cRootRefs,
[in, size_is(cRootRefs)] ObjectID rootRefIds[] );
HRESULT ExceptionThrown(
[in] ObjectID thrownObjectId);
HRESULT ExceptionSearchFunctionEnter(
[in] FunctionID functionId);
HRESULT ExceptionSearchFunctionLeave();
HRESULT ExceptionSearchFilterEnter(
[in] FunctionID functionId);
HRESULT ExceptionSearchFilterLeave();
HRESULT ExceptionSearchCatcherFound(
[in] FunctionID functionId);
HRESULT ExceptionOSHandlerEnter(
[in] UINT_PTR __unused);
HRESULT ExceptionOSHandlerLeave(
[in] UINT_PTR __unused);
HRESULT ExceptionUnwindFunctionEnter(
[in] FunctionID functionId);
HRESULT ExceptionUnwindFunctionLeave();
HRESULT ExceptionUnwindFinallyEnter(
[in] FunctionID functionId);
HRESULT ExceptionUnwindFinallyLeave();
HRESULT ExceptionCatcherEnter(
[in] FunctionID functionId,
[in] ObjectID objectId);
HRESULT ExceptionCatcherLeave();
HRESULT COMClassicVTableCreated(
[in] ClassID wrappedClassId,
[in] REFGUID implementedIID,
[in] void *pVTable,
[in] ULONG cSlots);
HRESULT COMClassicVTableDestroyed(
[in] ClassID wrappedClassId,
[in] REFGUID implementedIID,
[in] void *pVTable);
HRESULT ExceptionCLRCatcherFound();
HRESULT ExceptionCLRCatcherExecute();
}
メソッド
メソッド |
説明 |
---|---|
アプリケーション ドメインが作成されたことをプロファイラに通知します。 |
|
アプリケーション ドメインが作成されることをプロファイラに通知します。 |
|
アプリケーション ドメインがプロセスからアンロードされたことをプロファイラに通知します。 |
|
アプリケーション ドメインがプロセスからアンロードされることをプロファイラに通知します。 |
|
アセンブリが読み込みを完了したことをプロファイラに通知します。 |
|
アセンブリが読み込まれることをプロファイラに通知します。 |
|
アセンブリがアンロードされたことをプロファイラに通知します。 |
|
アセンブリがアンロードされることをプロファイラに通知します。 |
|
クラスが読み込みを完了したことをプロファイラに通知します。 |
|
クラスが読み込まれることをプロファイラに通知します。 |
|
クラスがアンロードを完了したことをプロファイラに通知します。 |
|
クラスがアンロードされることをプロファイラに通知します。 |
|
指定した IID とクラスのランタイム呼び出し可能ラッパー (RCW: Runtime Callable Wrapper) が作成されたことをプロファイラに通知します。 |
|
RCW が破棄されることをプロファイラに通知します。 |
|
適切な catch ブロックに制御が渡されていることをプロファイラに通知します。 |
|
適切な catch ブロックから制御が渡されていることをプロファイラに通知します。 |
|
.NET Framework Version 2.0 で互換性のために残されています。 |
|
.NET Framework 2.0 で互換性のために残されています。 |
|
実装されていません。アンマネージ例外情報を必要とするプロファイラは、他の方法でこの情報を取得する必要があります。 |
|
実装されていません。アンマネージ例外情報を必要とするプロファイラは、他の方法でこの情報を取得する必要があります。 |
|
例外処理の検索フェーズで、スローされた例外のハンドラが見つかったことをプロファイラに通知します。 |
|
ユーザー フィルタが実行されることをプロファイラに通知します。 |
|
ユーザー フィルタの実行が終了したことをプロファイラに通知します。 |
|
例外処理の検索フェーズが関数に入ったことをプロファイラに通知します。 |
|
例外処理の検索フェーズが関数の検索を完了したことをプロファイラに通知します。 |
|
例外がスローされたことをプロファイラに通知します。 |
|
例外処理のアンワインド フェーズが、指定した関数に含まれる finally 句に入ることをプロファイラに通知します。 |
|
例外処理のアンワインド フェーズの制御が finally 句を離れたことをプロファイラに通知します。 |
|
例外処理のアンワインド フェーズの制御が関数に入ったことをプロファイラに通知します。 |
|
例外処理のアンワインド フェーズの関数のアンワインドが終了したことをプロファイラに通知します。 |
|
ランタイムが関数のアンロードを開始したことをプロファイラに通知します。 |
|
新しい CLR アプリケーションが起動されるたびに、プロファイラを初期化するために呼び出されます。 |
|
NGen.exe を使用して以前にコンパイルされた関数の検索が完了したことをプロファイラに通知します。 |
|
NGen.exe を使用して以前にコンパイルされた関数の検索が開始されたことをプロファイラに通知します。 |
|
JIT コンパイラが関数のコンパイルを終了したことをプロファイラに通知します。 |
|
Just-In-Time (JIT) コンパイラが関数のコンパイルを開始したことをプロファイラに通知します。 |
|
JIT でコンパイルされた関数がメモリから削除されたことをプロファイラに通知します。 |
|
JIT コンパイラが関数を別の関数行内に挿入しようとしていることをプロファイラに通知します。 |
|
マネージ コードからアンマネージ コードへの移行が発生したことをプロファイラに通知します。 |
|
モジュールが親アセンブリにアタッチされることをプロファイラに通知します。 |
|
モジュールが読み込みを完了したことをプロファイラに通知します。 |
|
モジュールが読み込まれることをプロファイラに通知します。 |
|
モジュールがアンロードを完了したことをプロファイラに通知します。 |
|
モジュールがアンロードされることをプロファイラに通知します。 |
|
ガベージ コレクション中に移動されたオブジェクト参照についてプロファイラに通知します。 |
|
ヒープ内のメモリがオブジェクトに割り当てられたことをプロファイラに通知します。 |
|
指定したオブジェクトが参照するメモリ内にあるオブジェクトについてプロファイラに通知します。 |
|
指定した各クラスについて、前回ガベージ コレクションを実行した後で作成されたインスタンスの数をプロファイラに通知します。 |
|
リモート処理呼び出しがクライアントで実行されて完了したことをプロファイラに通知します。 |
|
リモート処理呼び出しが開始されたことをプロファイラに通知します。 |
|
リモート処理呼び出しのサーバー側の処理が完了したこと、およびクライアントが現在応答を受信中でこれからその応答を処理することをプロファイラに通知します。 |
|
クライアントがサーバーに要求を送信することをプロファイラに通知します。 |
|
リモート メソッドの呼び出し要求に応答して、プロセスがメソッドを呼び出して終了したことをプロファイラに通知します。 |
|
リモート メソッドの呼び出し要求に応答して、プロセスがメソッドを呼び出すことをプロファイラに通知します。 |
|
プロセスがリモート メソッドの呼び出し要求またはアクティベーション要求を受け取ることをプロファイラに通知します。 |
|
プロセスがリモート メソッドの呼び出し要求を完了し、チャネルを通じて応答を送信しようとしていることをプロファイラに通知します。 |
|
ガベージ コレクション後のルート参照に関する情報をプロファイラに通知します。 |
|
ランタイムがすべてのランタイム スレッドを再開し、通常の操作に戻ったことをプロファイラに通知します。 |
|
ランタイムがすべてのランタイム スレッドを再開することをプロファイラに通知します。 |
|
発生しているランタイムの中断をランタイムが中止したことをプロファイラに通知します。 |
|
ランタイムがすべてのランタイム スレッドの中断を完了したことをプロファイラに通知します。 |
|
ランタイムがすべてのランタイム スレッドを中断しようとしていることをプロファイラに通知します。 |
|
指定したスレッドが中断された後、再開されたことをプロファイラに通知します。 |
|
指定したスレッドが中断されたこと、または中断されようとしていることをプロファイラに通知します。 |
|
アプリケーションの終了処理中であることをプロファイラに通知します。 |
|
特定のオペレーティング システム (OS: Operating System) スレッドを使用してマネージ スレッドが実装されることをプロファイラに通知します。 |
|
スレッドが作成されたことをプロファイラに通知します。 |
|
スレッドが破棄されたことをプロファイラに通知します。 |
|
アンマネージ コードからマネージ コードへの移行が発生したことをプロファイラに通知します。 |
解説
CLR は ICorProfilerCallback (または ICorProfilerCallback2) インターフェイスでメソッドを呼び出して、プロファイラがサブスクライブしたイベントが発生したときにプロファイラに通知します。これは、CLR がコード プロファイラとの通信に使用するプライマリ コールバック インターフェイスです。
コード プロファイラは、ICorProfilerCallback インターフェイスのメソッドを実装する必要があります。.NET Framework Version 2.0 以降の場合、プロファイラは ICorProfilerCallback2 のメソッドも実装する必要があります。各メソッド実装は、S_OK (成功時) または E_FAIL (エラー時) の値を持つ HRESULT を返す必要があります。現在、CLR は、ICorProfilerCallback::ObjectReferences を除く各コールバックが返す HRESULT を無視します。
Microsoft Windows レジストリでは、コード プロファイラは ICorProfilerCallback インターフェイスおよび ICorProfilerCallback2 インターフェイスを実装するコンポーネント オブジェクト モデル (COM: Component Object Model) オブジェクトを登録する必要があります。コード プロファイラは、ICorProfilerInfo::SetEventMask を呼び出すことで、通知を受け取るイベントをサブスクライブします。これは通常、ICorProfilerCallback::Initialize のプロファイラの実装で行われます。これにより、イベントが発生するとき、または実行中のランタイム プロセスでイベントが発生したときに、プロファイラはランタイムから通知を受け取ることができます。
![]() |
---|
プロファイラは単一の COM オブジェクトを登録します。プロファイラが .NET Framework Version 1.0 または 1.1 を対象としている場合、その COM オブジェクトが実装する必要があるのは、ICorProfilerCallback のメソッドのみです。プロファイラが .NET Framework Version 2.0 以降を対象としている場合、その COM オブジェクトは ICorProfilerCallback2 のメソッドも実装する必要があります。 |
必要条件
プラットフォーム : 「.NET Framework システム要件」を参照
ヘッダー : CorProf.idl
ライブラリ : CorGuids.lib
.NET Framework のバージョン : 3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1、1.0