共用方式為


ICorProfilerCallback

更新:2007 年 11 月

提供方法,讓 Common Language Runtime (CLR) 在分析工具已訂閱的事件發生時,用於告知程式碼剖析工具。

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)。

ICorProfilerCallback::COMClassicVTableDestroyed 方法

向分析工具告知正在終結 RCW。

ICorProfilerCallback::ExceptionCatcherEnter 方法

向分析工具告知控制正傳遞至適當 catch 區塊。

ICorProfilerCallback::ExceptionCatcherLeave 方法

向分析工具告知控制正從適當 catch 區塊傳遞出來。

ICorProfilerCallback::ExceptionCLRCatcherExecute 方法

在 .NET Framework 2.0 版中已過時。

ICorProfilerCallback::ExceptionCLRCatcherFound 方法

在 .NET Framework 2.0 中已過時。

ICorProfilerCallback::ExceptionOSHandlerEnter 方法

尚未實作。需要 Unmanaged 例外狀況資訊的分析工具必須透過其他方法取得這項資訊。

ICorProfilerCallback::ExceptionOSHandlerLeave 方法

尚未實作。需要 Unmanaged 例外狀況資訊的分析工具必須透過其他方法取得這項資訊。

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 方法

向分析工具告知,已發生從 Managed 程式碼到 Unmanaged 程式碼的轉換。

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) 執行緒實作 Managed 執行緒。

ICorProfilerCallback::ThreadCreated 方法

向分析工具告知已建立執行緒。

ICorProfilerCallback::ThreadDestroyed 方法

向分析工具告知已終結執行緒。

ICorProfilerCallback::UnmanagedToManagedTransition 方法

向分析工具告知,已發生從 Unmanaged 程式碼到 Managed 程式碼的轉換。

備註

CLR 會在 ICorProfilerCallback (或 ICorProfilerCallback2) 介面中呼叫方法,以便於分析工具已訂閱的事件發生時告知分析工具。這是主要的回呼介面,CLR 會透過此介面與程式碼剖析工具通訊。

程式碼剖析工具必須實作 ICorProfilerCallback 介面的方法。對於 .NET Framework 2.0 和較新版本,分析工具也必須實作 ICorProfilerCallback2 方法。每個方法實作都必須傳回 HRESULT,成功時其值為 S_OK,失敗時則為 E_FAIL。目前,CLR 會忽略每個回呼所傳回的 HRESULT,但 ICorProfilerCallback::ObjectReferences 除外。

在 Microsoft Windows 登錄中,程式碼剖析工具必須註冊其元件物件模型 (Component Object Model,COM) 物件,該物件會實作 ICorProfilerCallbackICorProfilerCallback2 介面。程式碼剖析工具會呼叫 ICorProfilerInfo::SetEventMask,訂閱要接收告知的事件。通常會在分析工具的 ICorProfilerCallback::Initialize 實作中完成此項。當執行的執行階段處理序中即將發生事件或剛才已發生事件時,分析工具就能夠接收告知。

注意事項:

分析工具會註冊一個 COM 物件。如果分析工具是針對 .NET Framework 1.0 版或 1.1 版,則該 COM 物件只需要實作 ICorProfilerCallback 的方法。如果是針對 .NET Framework 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

其他資源

分析介面