ICorProfilerCallback

更新:2007 年 11 月

提供公共语言运行库 (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 方法

未实现。需要非托管异常信息的探查器必须通过其他方式获取此信息。

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

通知探查器实时 (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) 线程实现某个托管线程。

ICorProfilerCallback::ThreadCreated 方法

通知探查器已创建线程。

ICorProfilerCallback::ThreadDestroyed 方法

通知探查器已销毁某个线程。

ICorProfilerCallback::UnmanagedToManagedTransition 方法

通知探查器已发生从非托管代码到托管代码的转换。

备注

当探查器订阅的事件发生时,CLR 将调用 ICorProfilerCallback(或 ICorProfilerCallback2)接口中的方法来通知该探查器。这是 CLR 用来与代码探查器通信的主回调接口。

代码探查器必须实现 ICorProfilerCallback 接口的方法。对于 .NET Framework 2.0 版或更高版本,该探查器还必须实现 ICorProfilerCallback2 方法。每个方法实现都必须返回一个 HRESULT,如果成功,则它的值为 S_OK,否则它的值为 E_FAIL。目前,CLR 会忽略每个回调(ICorProfilerCallback::ObjectReferences 除外)返回的 HRESULT。

在 Microsoft Windows 注册表中,代码探查器必须注册其用于实现 ICorProfilerCallbackICorProfilerCallback2 接口的组件对象模型 (COM) 对象。代码探查器通过调用 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

其他资源

分析接口