次の方法で共有


ICorProfilerCallback

更新 : 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();
}

メソッド

メソッド

説明

ICorProfilerCallback::AppDomainCreationFinished メソッド

アプリケーション ドメインが作成されたことをプロファイラに通知します。

ICorProfilerCallback::AppDomainCreationStarted メソッド

アプリケーション ドメインが作成されることをプロファイラに通知します。

ICorProfilerCallback::AppDomainShutdownFinished メソッド

アプリケーション ドメインがプロセスからアンロードされたことをプロファイラに通知します。

ICorProfilerCallback::AppDomainShutdownStarted メソッド

アプリケーション ドメインがプロセスからアンロードされることをプロファイラに通知します。

ICorProfilerCallback::AssemblyLoadFinished メソッド

アセンブリが読み込みを完了したことをプロファイラに通知します。

ICorProfilerCallback::AssemblyLoadStarted メソッド

アセンブリが読み込まれることをプロファイラに通知します。

ICorProfilerCallback::AssemblyUnloadFinished メソッド

アセンブリがアンロードされたことをプロファイラに通知します。

ICorProfilerCallback::AssemblyUnloadStarted メソッド

アセンブリがアンロードされることをプロファイラに通知します。

ICorProfilerCallback::ClassLoadFinished メソッド

クラスが読み込みを完了したことをプロファイラに通知します。

ICorProfilerCallback::ClassLoadStarted メソッド

クラスが読み込まれることをプロファイラに通知します。

ICorProfilerCallback::ClassUnloadFinished メソッド

クラスがアンロードを完了したことをプロファイラに通知します。

ICorProfilerCallback::ClassUnloadStarted メソッド

クラスがアンロードされることをプロファイラに通知します。

ICorProfilerCallback::COMClassicVTableCreated メソッド

指定した IID とクラスのランタイム呼び出し可能ラッパー (RCW: Runtime Callable Wrapper) が作成されたことをプロファイラに通知します。

ICorProfilerCallback::COMClassicVTableDestroyed メソッド

RCW が破棄されることをプロファイラに通知します。

ICorProfilerCallback::ExceptionCatcherEnter メソッド

適切な catch ブロックに制御が渡されていることをプロファイラに通知します。

ICorProfilerCallback::ExceptionCatcherLeave メソッド

適切な catch ブロックから制御が渡されていることをプロファイラに通知します。

ICorProfilerCallback::ExceptionCLRCatcherExecute メソッド

.NET Framework Version 2.0 で互換性のために残されています。

ICorProfilerCallback::ExceptionCLRCatcherFound メソッド

.NET Framework 2.0 で互換性のために残されています。

ICorProfilerCallback::ExceptionOSHandlerEnter メソッド

実装されていません。アンマネージ例外情報を必要とするプロファイラは、他の方法でこの情報を取得する必要があります。

ICorProfilerCallback::ExceptionOSHandlerLeave メソッド

実装されていません。アンマネージ例外情報を必要とするプロファイラは、他の方法でこの情報を取得する必要があります。

ICorProfilerCallback::ExceptionSearchCatcherFound メソッド

例外処理の検索フェーズで、スローされた例外のハンドラが見つかったことをプロファイラに通知します。

ICorProfilerCallback::ExceptionSearchFilterEnter メソッド

ユーザー フィルタが実行されることをプロファイラに通知します。

ICorProfilerCallback::ExceptionSearchFilterLeave メソッド

ユーザー フィルタの実行が終了したことをプロファイラに通知します。

ICorProfilerCallback::ExceptionSearchFunctionEnter メソッド

例外処理の検索フェーズが関数に入ったことをプロファイラに通知します。

ICorProfilerCallback::ExceptionSearchFunctionLeave メソッド

例外処理の検索フェーズが関数の検索を完了したことをプロファイラに通知します。

ICorProfilerCallback::ExceptionThrown メソッド

例外がスローされたことをプロファイラに通知します。

ICorProfilerCallback::ExceptionUnwindFinallyEnter メソッド

例外処理のアンワインド フェーズが、指定した関数に含まれる finally 句に入ることをプロファイラに通知します。

ICorProfilerCallback::ExceptionUnwindFinallyLeave メソッド

例外処理のアンワインド フェーズの制御が finally 句を離れたことをプロファイラに通知します。

ICorProfilerCallback::ExceptionUnwindFunctionEnter メソッド

例外処理のアンワインド フェーズの制御が関数に入ったことをプロファイラに通知します。

ICorProfilerCallback::ExceptionUnwindFunctionLeave メソッド

例外処理のアンワインド フェーズの関数のアンワインドが終了したことをプロファイラに通知します。

ICorProfilerCallback::FunctionUnloadStarted メソッド

ランタイムが関数のアンロードを開始したことをプロファイラに通知します。

ICorProfilerCallback::Initialize メソッド

新しい CLR アプリケーションが起動されるたびに、プロファイラを初期化するために呼び出されます。

ICorProfilerCallback::JITCachedFunctionSearchFinished メソッド

NGen.exe を使用して以前にコンパイルされた関数の検索が完了したことをプロファイラに通知します。

ICorProfilerCallback::JITCachedFunctionSearchStarted メソッド

NGen.exe を使用して以前にコンパイルされた関数の検索が開始されたことをプロファイラに通知します。

ICorProfilerCallback::JITCompilationFinished メソッド

JIT コンパイラが関数のコンパイルを終了したことをプロファイラに通知します。

ICorProfilerCallback::JITCompilationStarted メソッド

Just-In-Time (JIT) コンパイラが関数のコンパイルを開始したことをプロファイラに通知します。

ICorProfilerCallback::JITFunctionPitched メソッド

JIT でコンパイルされた関数がメモリから削除されたことをプロファイラに通知します。

ICorProfilerCallback::JITInlining メソッド

JIT コンパイラが関数を別の関数行内に挿入しようとしていることをプロファイラに通知します。

ICorProfilerCallback::ManagedToUnmanagedTransition メソッド

マネージ コードからアンマネージ コードへの移行が発生したことをプロファイラに通知します。

ICorProfilerCallback::ModuleAttachedToAssembly メソッド

モジュールが親アセンブリにアタッチされることをプロファイラに通知します。

ICorProfilerCallback::ModuleLoadFinished メソッド

モジュールが読み込みを完了したことをプロファイラに通知します。

ICorProfilerCallback::ModuleLoadStarted メソッド

モジュールが読み込まれることをプロファイラに通知します。

ICorProfilerCallback::ModuleUnloadFinished メソッド

モジュールがアンロードを完了したことをプロファイラに通知します。

ICorProfilerCallback::ModuleUnloadStarted メソッド

モジュールがアンロードされることをプロファイラに通知します。

ICorProfilerCallback::MovedReferences メソッド

ガベージ コレクション中に移動されたオブジェクト参照についてプロファイラに通知します。

ICorProfilerCallback::ObjectAllocated メソッド

ヒープ内のメモリがオブジェクトに割り当てられたことをプロファイラに通知します。

ICorProfilerCallback::ObjectReferences メソッド

指定したオブジェクトが参照するメモリ内にあるオブジェクトについてプロファイラに通知します。

ICorProfilerCallback::ObjectsAllocatedByClass メソッド

指定した各クラスについて、前回ガベージ コレクションを実行した後で作成されたインスタンスの数をプロファイラに通知します。

ICorProfilerCallback::RemotingClientInvocationFinished メソッド

リモート処理呼び出しがクライアントで実行されて完了したことをプロファイラに通知します。

ICorProfilerCallback::RemotingClientInvocationStarted メソッド

リモート処理呼び出しが開始されたことをプロファイラに通知します。

ICorProfilerCallback::RemotingClientReceivingReply メソッド

リモート処理呼び出しのサーバー側の処理が完了したこと、およびクライアントが現在応答を受信中でこれからその応答を処理することをプロファイラに通知します。

ICorProfilerCallback::RemotingClientSendingMessage メソッド

クライアントがサーバーに要求を送信することをプロファイラに通知します。

ICorProfilerCallback::RemotingServerInvocationReturned メソッド

リモート メソッドの呼び出し要求に応答して、プロセスがメソッドを呼び出して終了したことをプロファイラに通知します。

ICorProfilerCallback::RemotingServerInvocationStarted メソッド

リモート メソッドの呼び出し要求に応答して、プロセスがメソッドを呼び出すことをプロファイラに通知します。

ICorProfilerCallback::RemotingServerReceivingMessage メソッド

プロセスがリモート メソッドの呼び出し要求またはアクティベーション要求を受け取ることをプロファイラに通知します。

ICorProfilerCallback::RemotingServerSendingReply メソッド

プロセスがリモート メソッドの呼び出し要求を完了し、チャネルを通じて応答を送信しようとしていることをプロファイラに通知します。

ICorProfilerCallback::RootReferences メソッド

ガベージ コレクション後のルート参照に関する情報をプロファイラに通知します。

ICorProfilerCallback::RuntimeResumeFinished メソッド

ランタイムがすべてのランタイム スレッドを再開し、通常の操作に戻ったことをプロファイラに通知します。

ICorProfilerCallback::RuntimeResumeStarted メソッド

ランタイムがすべてのランタイム スレッドを再開することをプロファイラに通知します。

ICorProfilerCallback::RuntimeSuspendAborted メソッド

発生しているランタイムの中断をランタイムが中止したことをプロファイラに通知します。

ICorProfilerCallback::RuntimeSuspendFinished メソッド

ランタイムがすべてのランタイム スレッドの中断を完了したことをプロファイラに通知します。

ICorProfilerCallback::RuntimeSuspendStarted メソッド

ランタイムがすべてのランタイム スレッドを中断しようとしていることをプロファイラに通知します。

ICorProfilerCallback::RuntimeThreadResumed メソッド

指定したスレッドが中断された後、再開されたことをプロファイラに通知します。

ICorProfilerCallback::RuntimeThreadSuspended メソッド

指定したスレッドが中断されたこと、または中断されようとしていることをプロファイラに通知します。

ICorProfilerCallback::Shutdown メソッド

アプリケーションの終了処理中であることをプロファイラに通知します。

ICorProfilerCallback::ThreadAssignedToOSThread メソッド

特定のオペレーティング システム (OS: Operating System) スレッドを使用してマネージ スレッドが実装されることをプロファイラに通知します。

ICorProfilerCallback::ThreadCreated メソッド

スレッドが作成されたことをプロファイラに通知します。

ICorProfilerCallback::ThreadDestroyed メソッド

スレッドが破棄されたことをプロファイラに通知します。

ICorProfilerCallback::UnmanagedToManagedTransition メソッド

アンマネージ コードからマネージ コードへの移行が発生したことをプロファイラに通知します。

解説

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 のプロファイラの実装で行われます。これにより、イベントが発生するとき、または実行中のランタイム プロセスでイベントが発生したときに、プロファイラはランタイムから通知を受け取ることができます。

ms230818.alert_note(ja-jp,VS.90).gifメモ :

プロファイラは単一の 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

参照

参照

ICorProfilerCallback2

その他の技術情報

プロファイリングのインターフェイス