Freigeben über


ICorProfilerCallback-Schnittstelle

Aktualisiert: November 2007

Stellt Methoden bereit, mit denen die Common Language Runtime (CLR) einen Codeprofiler benachrichtigt, wenn die abonnierten Ereignisse des Profilers auftreten.

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

Methoden

Methode

Beschreibung

ICorProfilerCallback::AppDomainCreationFinished-Methode

Benachrichtigt den Profiler, dass eine Anwendungsdomäne erstellt wurde.

ICorProfilerCallback::AppDomainCreationStarted-Methode

Benachrichtigt den Profiler, dass eine Anwendungsdomäne erstellt wird.

ICorProfilerCallback::AppDomainShutdownFinished-Methode

Benachrichtigt den Profiler, dass eine Anwendungsdomäne aus einem Prozess entladen wurde.

ICorProfilerCallback::AppDomainShutdownStarted-Methode

Benachrichtigt den Profiler, dass eine Anwendungsdomäne aus einem Prozess entladen wird.

ICorProfilerCallback::AssemblyLoadFinished-Methode

Benachrichtigt den Profiler, dass eine Assembly fertig geladen ist.

ICorProfilerCallback::AssemblyLoadStarted-Methode

Benachrichtigt den Profiler, dass eine Assembly geladen wird.

ICorProfilerCallback::AssemblyUnloadFinished-Methode

Benachrichtigt den Profiler, dass eine Assembly entladen wurde.

ICorProfilerCallback::AssemblyUnloadStarted-Methode

Benachrichtigt den Profiler, dass eine Assembly entladen wird.

ICorProfilerCallback::ClassLoadFinished-Methode

Benachrichtigt den Profiler, dass eine Klasse fertig geladen ist.

ICorProfilerCallback::ClassLoadStarted-Methode

Benachrichtigt den Profiler, dass eine Klasse geladen wird.

ICorProfilerCallback::ClassUnloadFinished-Methode

Benachrichtigt den Profiler, dass eine Klasse fertig entladen ist.

ICorProfilerCallback::ClassUnloadStarted-Methode

Benachrichtigt den Profiler, dass eine Klasse entladen wird.

ICorProfilerCallback::COMClassicVTableCreated-Methode

Benachrichtigt den Profiler, dass ein Runtime Callable Wrapper (RCW) für die angegebene IID und Klasse erstellt wurde.

ICorProfilerCallback::COMClassicVTableDestroyed-Methode

Benachrichtigt den Profiler, dass ein RCW zerstört wird.

ICorProfilerCallback::ExceptionCatcherEnter-Methode

Benachrichtigt den Profiler, dass die Steuerung an den entsprechenden catch-Block übergeben wird.

ICorProfilerCallback::ExceptionCatcherLeave-Methode

Benachrichtigt den Profiler, dass das Steuerelement aus dem entsprechenden catch-Block übergeben wird.

ICorProfilerCallback::ExceptionCLRCatcherExecute-Methode

In .NET Framework, Version 2.0, veraltet.

ICorProfilerCallback::ExceptionCLRCatcherFound-Methode

In .NET Framework, Version 2.0, veraltet.

ICorProfilerCallback::ExceptionOSHandlerEnter-Methode

Nicht implementiert. Ein Profiler, der nicht verwaltete Ausnahmeinformationen benötigt, muss sich diese Informationen auf andere Weise beschaffen.

ICorProfilerCallback::ExceptionOSHandlerLeave-Methode

Nicht implementiert. Ein Profiler, der nicht verwaltete Ausnahmeinformationen benötigt, muss sich diese Informationen auf andere Weise beschaffen.

ICorProfilerCallback::ExceptionSearchCatcherFound-Methode

Benachrichtigt den Profiler, dass in der Suchphase der Ausnahmebehandlung ein Handler für die ausgelöste Ausnahme gefunden wurde.

ICorProfilerCallback::ExceptionSearchFilterEnter-Methode

Benachrichtigt den Profiler, dass ein Benutzerfilter ausgeführt wird.

ICorProfilerCallback::ExceptionSearchFilterLeave-Methode

Benachrichtigt den Profiler, dass ein Benutzerfilter gerade die Ausführung beendet hat.

ICorProfilerCallback::ExceptionSearchFunctionEnter-Methode

Benachrichtigt den Profiler, dass die Suchphase der Ausnahmebehandlung in eine Funktion eingetreten ist.

ICorProfilerCallback::ExceptionSearchFunctionLeave-Methode

Benachrichtigt den Profiler, dass die Suchphase der Ausnahmebehandlung in einer Funktion beendet ist.

ICorProfilerCallback::ExceptionThrown-Methode

Benachrichtigt den Profiler, dass eine Ausnahme ausgelöst wurde.

ICorProfilerCallback::ExceptionUnwindFinallyEnter-Methode

Benachrichtigt den Profiler, dass die Entladephase der Ausnahmebehandlung in eine finally-Klausel eintritt, die in der angegebenen Funktion enthalten ist.

ICorProfilerCallback::ExceptionUnwindFinallyLeave-Methode

Benachrichtigt den Profiler, dass in der Entladephase der Ausnahmebehandlung der Austritt aus einer finally-Klausel erfolgt ist.

ICorProfilerCallback::ExceptionUnwindFunctionEnter-Methode

Benachrichtigt den Profiler, dass die Entladephase der Ausnahmebehandlung in eine Funktion eingetreten ist.

ICorProfilerCallback::ExceptionUnwindFunctionLeave-Methode

Benachrichtigt den Profiler, dass die Entladephase der Ausnahmebehandlung das Entladen einer Funktion abgeschlossen hat.

ICorProfilerCallback::FunctionUnloadStarted-Methode

Benachrichtigt den Profiler, dass die Laufzeit begonnen hat, eine Funktion zu entladen.

ICorProfilerCallback::Initialize-Methode

Wird aufgerufen, um den Profiler zu initialisieren, wenn eine neue CLR-Anwendung gestartet wird.

ICorProfilerCallback::JITCachedFunctionSearchFinished-Methode

Benachrichtigt den Profiler, dass eine Suche für eine Funktion beendet wurde, die vorher mit NGen.exe kompiliert wurde.

ICorProfilerCallback::JITCachedFunctionSearchStarted-Methode

Benachrichtigt den Profiler, dass eine Suche für eine Funktion begonnen wurde, die vorher mit NGen.exe kompiliert wurde.

ICorProfilerCallback::JITCompilationFinished-Methode

Benachrichtigt den Profiler, dass der JIT-Compiler die Kompilierung einer Funktion beendet hat.

ICorProfilerCallback::JITCompilationStarted-Methode

Benachrichtigt den Profiler, dass der JIT-Compiler (Just-In-Time) begonnen hat, eine Funktion zu kompilieren.

ICorProfilerCallback::JITFunctionPitched-Methode

Benachrichtigt den Profiler, dass eine JIT-kompilierte Funktion aus dem Arbeitsspeicher entfernt wurde.

ICorProfilerCallback::JITInlining-Methode

Benachrichtigt den Profiler, dass der JIT-Compiler gerade eine Funktion inline in eine andere Funktion einfügt.

ICorProfilerCallback::ManagedToUnmanagedTransition-Methode

Benachrichtigt den Profiler, dass ein Übergang von verwaltetem Code zu nicht verwaltetem Code aufgetreten ist.

ICorProfilerCallback::ModuleAttachedToAssembly-Methode

Benachrichtigt den Profiler, dass ein Modul an seine übergeordnete Assembly angefügt wird.

ICorProfilerCallback::ModuleLoadFinished-Methode

Benachrichtigt den Profiler, dass ein Modul fertig geladen ist.

ICorProfilerCallback::ModuleLoadStarted-Methode

Benachrichtigt den Profiler, dass ein Modul geladen wird.

ICorProfilerCallback::ModuleUnloadFinished-Methode

Benachrichtigt den Profiler, dass ein Modul fertig entladen ist.

ICorProfilerCallback::ModuleUnloadStarted-Methode

Benachrichtigt den Profiler, dass ein Modul entladen wird.

ICorProfilerCallback::MovedReferences-Methode

Benachrichtigt den Profiler über Objektverweise, die während der Garbage Collection verschoben wurden.

ICorProfilerCallback::ObjectAllocated-Methode

Benachrichtigt den Profiler, dass Arbeitsspeicher im Heap für ein Objekt reserviert wurde.

ICorProfilerCallback::ObjectReferences-Methode

Benachrichtigt den Profiler über Objekte im Arbeitsspeicher, auf die vom angegebenen Objekt verwiesen wird.

ICorProfilerCallback::ObjectsAllocatedByClass-Methode

Benachrichtigt den Profiler über die Anzahl der Instanzen jeder angegebenen Klasse, die seit der letzten Garbage Collection erstellt wurden.

ICorProfilerCallback::RemotingClientInvocationFinished-Methode

Benachrichtigt den Profiler, dass ein Remotingaufruf auf dem Client abgeschlossen wurde.

ICorProfilerCallback::RemotingClientInvocationStarted-Methode

Benachrichtigt den Profiler, dass ein Remotingaufruf gestartet wurde.

ICorProfilerCallback::RemotingClientReceivingReply-Methode

Benachrichtigt den Profiler, dass der serverseitige Teil eines Remotingaufrufs abgeschlossen ist und der Client jetzt empfängt und mit der Verarbeitung der Antwort beginnt.

ICorProfilerCallback::RemotingClientSendingMessage-Methode

Benachrichtigt den Profiler, dass der Client eine Anforderung an den Server sendet.

ICorProfilerCallback::RemotingServerInvocationReturned-Methode

Benachrichtigt den Profiler, dass der Prozess den Aufruf einer Methode als Reaktion auf die Aufrufanforderung einer Remotemethode beendet hat.

ICorProfilerCallback::RemotingServerInvocationStarted-Methode

Benachrichtigt den Codeprofiler, dass der Prozess aufgrund der Aufrufanforderung einer Remotemethode eine Methode aufruft.

ICorProfilerCallback::RemotingServerReceivingMessage-Methode

Benachrichtigt den Profiler, dass der Prozess eine Aufrufanforderung oder eine Aktivierungsanforderung einer Remotemethode empfängt.

ICorProfilerCallback::RemotingServerSendingReply-Methode

Benachrichtigt den Profiler, dass der Prozess die Verarbeitung einer Aufrufanforderung einer Remotemethode beendet hat und im Begriff ist, die Antwort über einen Channel zu übertragen.

ICorProfilerCallback::RootReferences-Methode

Benachrichtigt den Profiler mit Informationen über Stammverweise nach einer Garbage Collection.

ICorProfilerCallback::RuntimeResumeFinished-Methode

Benachrichtigt den Profiler, dass die Laufzeit sämtliche Laufzeitthreads fortgesetzt hat und zum normalen Ablauf zurückgekehrt ist.

ICorProfilerCallback::RuntimeResumeStarted-Methode

Benachrichtigt den Profiler, dass die Common Language Runtime alle Laufzeitthreads fortsetzt.

ICorProfilerCallback::RuntimeSuspendAborted-Methode

Benachrichtigt den Profiler, dass die Common Language Runtime die aufgetretene Laufzeitunterbrechung abgebrochen hat.

ICorProfilerCallback::RuntimeSuspendFinished-Methode

Benachrichtigt den Profiler, dass die Laufzeit die Unterbrechung aller Laufzeitthreads abgeschlossen hat.

ICorProfilerCallback::RuntimeSuspendStarted-Methode

Benachrichtigt den Profiler, dass die Laufzeit alle Laufzeitthreads anhält.

ICorProfilerCallback::RuntimeThreadResumed-Methode

Benachrichtigt den Profiler, dass der angegebene Thread nach seiner Unterbrechung fortgesetzt wurde.

ICorProfilerCallback::RuntimeThreadSuspended-Methode

Benachrichtigt den Profiler, dass der angegebene Thread unterbrochen wurde oder kurz vor einer Unterbrechung steht.

ICorProfilerCallback::Shutdown-Methode

Benachrichtigt den Profiler, dass die Anwendung heruntergefahren wird.

ICorProfilerCallback::ThreadAssignedToOSThread-Methode

Benachrichtigt den Profiler, dass ein verwalteter Thread mit einem bestimmten Betriebssystemthread implementiert wird.

ICorProfilerCallback::ThreadCreated-Methode

Benachrichtigt den Profiler, dass ein Thread erstellt wurde.

ICorProfilerCallback::ThreadDestroyed-Methode

Benachrichtigt den Profiler, dass ein Thread zerstört wurde.

ICorProfilerCallback::UnmanagedToManagedTransition-Methode

Benachrichtigt den Profiler, dass ein Übergang von nicht verwaltetem Code zu verwaltetem Code aufgetreten ist.

Hinweise

Die CLR ruft eine Methode in der ICorProfilerCallback-Schnittstelle (oder der ICorProfilerCallback2-Schnittstelle) auf, um den Profiler zu benachrichtigen, wenn ein abonniertes Ereignis des Profilers auftritt. Dies ist die primäre Rückrufschnittstelle, über die die CLR mit dem Codeprofiler kommuniziert.

Ein Codeprofiler muss die Methoden der ICorProfilerCallback-Schnittstelle implementieren. Für .NET Framework, Version 2.0 und höher, muss der Profiler auch die ICorProfilerCallback2-Methoden implementieren. Jede Methodenimplementierung muss ein HRESULT zurückgeben, das bei Erfolg den Wert S_OK und bei einem Fehler den Wert E_FAIL aufweist. Die CLR ignoriert derzeit das HRESULT, das von jedem Rückruf außer ICorProfilerCallback::ObjectReferences zurückgegeben wird.

Ein Codeprofiler muss in der Microsoft Windows-Registrierung sein COM-Objekt (Component Object Model) registrieren, das die ICorProfilerCallback-Schnittstelle und die ICorProfilerCallback2-Schnittstelle implementiert. Ein Codeprofiler abonniert die Ereignisse, für die er eine Benachrichtigung empfangen möchte, indem er ICorProfilerInfo::SetEventMask aufruft. Dies geschieht in der Regel bei der Implementierung von ICorProfilerCallback::Initialize durch den Profiler. Der Profiler kann dann Benachrichtigungen von der Laufzeit empfangen, wenn demnächst ein Ereignis im gerade ausgeführten Laufzeitprozess auftritt oder aufgetreten ist.

Tipp

Der Profiler registriert ein einzelnes COM-Objekt. Wenn der Profiler auf .NET Framework, Version 1.0 oder 1.1, abzielt, muss das COM-Objekt nur die Methoden von ICorProfilerCallback implementieren. Wenn er auf .NET Framework, Version 2.0 und höher, abzielt, muss das COM-Objekt auch die Methoden von ICorProfilerCallback2 implementieren.

Anforderungen

Plattformen: siehe Systemanforderungen für .NET Framework.

Header: CorProf.idl

Bibliothek: CorGuids.lib

.NET Framework-Versionen: 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0

Siehe auch

Referenz

ICorProfilerCallback2

Weitere Ressourcen

Profilerstellungsschnittstellen