Freigeben über


ICorProfilerInfo2

Aktualisiert: November 2007

Stellt Methoden bereit, mit denen Codeprofiler mit der Common Language Runtime (CLR) kommunizieren können, um die Ereignisüberwachung zu steuern und Informationen anzufordern. Die ICorProfilerInfo2-Schnittstelle ist eine Erweiterung der ICorProfilerInfo-Schnittstelle. Das heißt, sie stellt neue, in .NET Framework, Version 2.0 und höher, unterstützte Methoden bereit.

interface ICorProfilerInfo2 : ICorProfilerInfo
{
    HRESULT DoStackSnapshot(
        [in] ThreadID thread,
        [in] StackSnapshotCallback *callback,
        [in] ULONG32 infoFlags,
        [in] void *clientData,
        [in, size_is(contextSize), length_is(contextSize)] BYTE context[],
        [in] ULONG32 contextSize);

    HRESULT SetEnterLeaveFunctionHooks2(
        [in] FunctionEnter2    *pFuncEnter,
        [in] FunctionLeave2    *pFuncLeave,
        [in] FunctionTailcall2 *pFuncTailcall);

    HRESULT GetFunctionInfo2(
        [in] FunctionID funcId,
        [in] COR_PRF_FRAME_INFO frameInfo,
        [out] ClassID *pClassId,
        [out] ModuleID *pModuleId,
        [out] mdToken *pToken,
        [in] ULONG32 cTypeArgs,
        [out] ULONG32 *pcTypeArgs,
        [out] ClassID typeArgs[]);

    HRESULT GetStringLayout(
        [out] ULONG *pBufferLengthOffset,
        [out] ULONG *pStringLengthOffset,
        [out] ULONG *pBufferOffset);

    HRESULT GetClassLayout(
        [in]  ClassID classID,
        [in, out] COR_FIELD_OFFSET rFieldOffset[],
        [in] ULONG cFieldOffset,
        [out] ULONG *pcFieldOffset,
        [out] ULONG *pulClassSize);

    HRESULT GetClassIDInfo2(
        [in] ClassID classId,
        [out] ModuleID *pModuleId,
        [out] mdTypeDef *pTypeDefToken,
        [out] ClassID *pParentClassId,
        [in] ULONG32 cNumTypeArgs,
        [out] ULONG32 *pcNumTypeArgs,
        [out] ClassID typeArgs[]);

    HRESULT GetCodeInfo2(
        [in] FunctionID functionID,
        [in] ULONG32 cCodeInfos,
        [out] ULONG32 *pcCodeInfos,
        [out, size_is(cCodeInfos), length_is(*pcCodeInfos)]
                COR_PRF_CODE_INFO codeInfos[]);

        HRESULT GetClassFromTokenAndTypeArgs(
        [in] ModuleID moduleID,
        [in] mdTypeDef typeDef,
        [in] ULONG32 cTypeArgs,
        [in, size_is(cTypeArgs)] ClassID typeArgs[],
        [out] ClassID* pClassID);

    HRESULT GetFunctionFromTokenAndTypeArgs(
        [in] ModuleID moduleID,
        [in] mdMethodDef funcDef,
        [in] ClassID classId,
        [in] ULONG32 cTypeArgs,
        [in, size_is(cTypeArgs)] ClassID typeArgs[],
        [out] FunctionID* pFunctionID);

    HRESULT EnumModuleFrozenObjects(
        [in] ModuleID moduleID,
        [out] ICorProfilerObjectEnum** ppEnum);

    HRESULT GetArrayObjectInfo(
        [in] ObjectID objectId,
        [in] ULONG32 cDimensions,
        [out, size_is(cDimensions), length_is(cDimensions)] ULONG32 pDimensionSizes[],
        [out, size_is(cDimensions), length_is(cDimensions)] int pDimensionLowerBounds[],
        [out] BYTE **ppData);

    HRESULT GetBoxClassLayout(
        [in] ClassID classId,
        [out] ULONG32 *pBufferOffset);

    HRESULT GetThreadAppDomain(
        [in] ThreadID threadId,
        [out] AppDomainID *pAppDomainId);

    HRESULT GetRVAStaticAddress(
        [in] ClassID classId,
        [in] mdFieldDef fieldToken,
        [out] void **ppAddress);

    HRESULT GetAppDomainStaticAddress(
        [in] ClassID classId,
        [in] mdFieldDef fieldToken,
        [in] AppDomainID appDomainId,
        [out] void **ppAddress);

    HRESULT GetThreadStaticAddress(
        [in] ClassID classId,
        [in] mdFieldDef fieldToken,
        [in] ThreadID threadId,
        [out] void **ppAddress);

    HRESULT GetContextStaticAddress(
        [in] ClassID classId,
        [in] mdFieldDef fieldToken,
        [in] ContextID contextId,
        [out] void **ppAddress);

    HRESULT GetStaticFieldInfo(
        [in] ClassID classId,
        [in] mdFieldDef fieldToken,
        [out] COR_PRF_STATIC_TYPE *pFieldInfo);

    HRESULT GetGenerationBounds(
        [in] ULONG cObjectRanges,
        [out] ULONG *pcObjectRanges,
        [out, size_is(cObjectRanges), length_is(*pcObjectRanges)] COR_PRF_GC_GENERATION_RANGE ranges[]);

    HRESULT GetObjectGeneration(
        [in] ObjectID objectId,
        [out] COR_PRF_GC_GENERATION_RANGE *range);

    HRESULT GetNotifiedExceptionClauseInfo(
        [out] COR_PRF_EX_CLAUSE_INFO *pinfo);
}

Methoden

Methode

Beschreibung

ICorProfilerInfo2::DoStackSnapshot-Methode

Durchläuft den Stapel des angegebenen Threads, um dem Profiler verwaltete Aufrufrahmen zu melden.

ICorProfilerInfo2::EnumModuleFrozenObjects-Methode

Ruft einen Enumerator ab, der eine Iteration der fixierten Objekte im angegebenen Modul ermöglicht.

ICorProfilerInfo2::GetAppDomainStaticAddress-Methode

Ruft die Adresse des angegebenen statischen Felds der Anwendungsdomäne ab, das sich im Bereich der angegebenen Anwendungsdomäne befindet.

ICorProfilerInfo2::GetArrayObjectInfo-Methode

Ruft ausführliche Informationen zu einem Arrayobjekt ab.

ICorProfilerInfo2::GetBoxClassLayout-Methode

Ruft Informationen zum Klassenlayout für einen angegebenen Werttyp ab, der mittel Boxing konvertiert wird.

ICorProfilerInfo2::GetClassFromTokenAndTypeArgs-Methode

Ruft die ClassID eines Typs mithilfe des angegebenen Metadatentokens und der ClassID-Werte beliebiger Typargumente ab.

ICorProfilerInfo2::GetClassIDInfo2-Methode

Ruft das übergeordnete Modul der angegebenen generischen Klasse, das Metadatentoken für die Klasse, die ClassID ihrer übergeordneten Klasse sowie die ClassID jedes Typarguments der Klasse (sofern vorhanden) ab.

ICorProfilerInfo2::GetClassLayout-Methode

Ruft im Arbeitsspeicher Informationen zum Layout der Felder ab, die von der angegebenen Klasse definiert sind. Das heißt, diese Methode ruft die Offsets der Felder der Klasse ab.

ICorProfilerInfo2::GetCodeInfo2-Methode

Ruft die Wertebereiche des systemeigenen Codes ab, die der angegebenen FunctionID zugeordnet sind.

ICorProfilerInfo2::GetContextStaticAddress-Methode

Ruft die Adresse des angegebenen statischen Felds des Kontexts ab, das sich im Bereich des angegebenen Kontexts befindet.

ICorProfilerInfo2::GetFunctionFromTokenAndTypeArgs-Methode

Ruft die FunctionID einer Funktion mithilfe des angegebenen Metadatentokens ab, einschließlich der Klasse und der ClassID-Werte beliebiger Typargumente.

ICorProfilerInfo2::GetFunctionInfo2-Methode

Ruft die übergeordnete Klasse, das Metadatentoken und die ClassID jedes Typarguments (falls vorhanden) einer Funktion ab.

ICorProfilerInfo2::GetGenerationBounds-Methode

Ruft die Arbeitsspeicherbereiche ab (die Segmente des Heaps), aus denen sich die Generationen des Garbage Collector-Heaps zusammensetzen.

ICorProfilerInfo2::GetNotifiedExceptionClauseInfo-Methode

Ruft die systemeigene Adress- und Rahmeninformationen für die Ausnahmeklausel (catch/finally/filter) ab, die kurz vor der Ausführung steht oder gerade ausgeführt wurde.

ICorProfilerInfo2::GetObjectGeneration-Methode

Ruft das Segment des Heaps ab, der das angegebene Objekt enthält.

ICorProfilerInfo2::GetRVAStaticAddress-Methode

Ruft die Adresse des statischen Felds der angegebenen relativen virtuellen Adresse (RVA) ab.

ICorProfilerInfo2::GetStaticFieldInfo-Methode

Ruft den Bereich ab, in dem das angegebene Feld statisch ist.

ICorProfilerInfo2::GetStringLayout-Methode

Ruft Informationen über das Layout eines Zeichenfolgenobjekts ab.

ICorProfilerInfo2::GetThreadAppDomain-Methode

Ruft die ID der Anwendungsdomäne ab, in der der angegebene Thread gerade Code ausführt.

ICorProfilerInfo2::GetThreadStaticAddress-Methode

Ruft die Adresse des angegebenen statischen Felds des Threads ab, das sich im Bereich des angegebenen Threads befindet.

ICorProfilerInfo2::SetEnterLeaveFunctionHooks2-Methode

Gibt vom Profiler implementierte Funktionen an, die für die Hooks "enter", "leave" und "tailcall" verwalteter Funktionen aufgerufen werden.

Hinweise

Ein Profiler ruft eine Methode in der ICorProfilerInfo2-Schnittstelle zur Kommunikation mit der CLR ab, um die Ereignisüberwachung zu steuern und Informationen anzufordern.

Die Methoden der ICorProfilerInfo2-Schnittstelle werden von der CLR über ein Freethreadmodell implementiert. Jede Methode gibt ein HRESULT zurück, um Erfolg oder Fehler anzugeben. Eine Liste möglicher Rückgabecodes finden Sie in der Datei CorError.h.

Die CLR übergibt während der Initialisierung an alle Codeprofiler eine ICorProfilerInfo2-Schnittstelle. Sie verwendet dabei die Profilerimplementierung von ICorProfilerCallback::Initialize. Ein Codeprofiler kann dann Methoden in der ICorProfilerInfo2-Schnittstelle aufrufen, um Informationen zu verwaltetem Code abzurufen, dessen Ausführung von der CLR gesteuert wird.

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

Siehe auch

Referenz

ICorProfilerInfo

Weitere Ressourcen

Profilerstellungsschnittstellen