Freigeben über


Objektüberprüfung in der Profilerstellungs-API

In diesem Thema wird erläutert, wie Sie Profilerstellungsmethoden zum Überprüfen von Objekten verwenden.

FunctionEnter2- und FunctionLeave2-Rückrufe

Der FunctionEnter2-Rückruf und der FunctionLeave2-Rückruf bieten Informationen über die Argumente und geben den Wert einer Funktion als Speicherbereich zurück. Die Argumente werden in den entsprechenden Speicherbereichen von links nach rechts gespeichert. Ein Profiler kann die Metadatensignatur der Funktion zum Interpretieren der Argumente verwenden, wie in der folgenden Tabelle dargestellt.

ELEMENT_TYPE

Darstellung

Primitive (ELEMENT_TYPE <= R8, I, U)

Primitive Werte.

Werttypen (VALUETYPE)

Hängt vom Typ ab.

Referenztypen (CLASS, STRING, OBJECT, ARRAY, GENERICINST, SZARRAY)

ObjectID (Zeiger in einen Garbage Collection-Heap).

BYREF

Verwalteter Zeiger (keine ObjectID, kann jedoch auf einen Stapel oder einen Garbage Collection-Heap verweisen).

PTR

Nicht verwalteter Zeiger (nicht durch die Garbage Collection verschiebbar).

FNPTR

Nicht transparenter Wert in Zeigergröße.

TYPEDBYREF

Verwalteter Zeiger, gefolgt von einem nicht transparenten Wert in Zeigergröße.

Der Unterschied zwischen einer ObjectID und einem verwalteten Zeiger ist der folgende:

  • ObjectIDs verweisen nur auf den Garbage Collection-Heap oder den Heap fixierter Objekte. Verwaltete Zeiger können auch auf den Stapel verweisen.

  • ObjectIDs verweisen immer auf den Anfang eines Objekts. Verwaltete Zeiger können auch auf eines der Objektfelder verweisen.

  • Verwaltete Zeiger können nicht an Funktionen übergeben werden, die eine ObjectID erwarten.

Eine Liste der verfügbaren CLR-Typen finden Sie in der CorElementType-Enumeration.

Überprüfen komplexer Typen

Das Überprüfen von Referenztypen oder nicht primitiven Werttypen setzt einige erweiterte Verfahren voraus.

Für Werttypen und Referenztypen, die keine Zeichenfolgen oder Arrays sind, bietet die ICorProfilerInfo2::GetClassLayout-Methode den Offset für die einzelnen Felder. Anhand der Metadaten kann der Profiler dann den Feldtyp ermitteln und ihn rekursiv auswerten.

HinweisHinweis

GetClassLayout gibt nur die Felder zurück, die von der Klasse selbst definiert werden; von der übergeordneten Klasse definierte Felder sind nicht eingeschlossen.Mit der ICorProfilerInfo2::GetClassIDInfo2-Methode können Sie die ClassID der übergeordneten Klasse ermitteln und dann GetClassLayout zum Abrufen der Informationen über die von der übergeordneten Klasse definierten Felder verwenden.

Für geschachtelte Werttypen stellt die ICorProfilerInfo2::GetBoxClassLayout-Methode den Offset des Werttyps innerhalb des Felds bereit. Das Layout des Werttyps selbst ändert sich nicht. Daher kann der Profiler GetClassLayout zum Interpretieren des Layouts verwenden, sobald er den Werttyp im Feld ermittelt hat.

Für Zeichenfolgen stellt die ICorProfilerInfo2::GetStringLayout-Methode die Offsets relevanter Datenteile im Zeichenfolgenobjekt bereit.

Arrays bilden hierbei eine gewisse Ausnahme, da Sie eine Methode für die einzelnen Arrayobjekte und nicht jeden Arraytyp aufrufen müssen. (Das liegt daran, dass es zu viele Arrayformate gibt, die nicht alle durch Offsets beschrieben werden können.) Zum Durchführen der Interpretation steht die ICorProfilerInfo2::GetArrayObjectInfo-Methode zur Verfügung.

Überprüfen statischer Felder

Es gibt vier Typen von statischen Feldern. In der folgenden Tabelle ist aufgeführt, was diese Felder sind und wie Sie sie erkennen können.

Statischer Typ

Definition

Wie in den Metadaten angezeigt

AppDomain

Ein grundlegendes statisches Feld. Es verfügt in jeder Anwendungsdomäne über einen anderen Wert.

Statisches Feld, das über keine angefügten benutzerdefinierten Attribute verfügt.

Thread

Verwalteter lokaler Threadspeicher (TLS) Dies ist ein statisches Feld mit einem eindeutigen Wert für jeden Thread und jede Anwendungsdomäne.

Mit ThreadStaticAttribute markiertes statisches Feld.

RVA

Durch einen Prozess bewertetes statisches Feld mit Speicherort im Datenabschnitt des Moduls.

Statisches Feld mit hasRVA-Flag.

Kontext

Statisches Feld mit einem anderen Wert in jedem COM+-Kontext.

Mit ContextStaticAttribute markiertes statisches Feld.

Die Methoden ICorProfilerInfo2::GetThreadStaticAddress, ICorProfilerInfo2::GetAppDomainStaticAddress, ICorProfilerInfo2::GetContextStaticAddress und ICorProfilerInfo2::GetRVAStaticAddress stellen Informationen über den Speicherort von statischen Feldern bereit. Unter Berücksichtigung des Speichers an diesem Speicherort können Sie dies wie folgt interpretieren:

  • Referenztypen: ObjectID.

  • Werttypen: ObjectID des Felds, das den eigentlichen Wert enthält.

  • Primitive Typen: Primitiver Wert.

Referenz

FunctionEnter2-Funktion

FunctionLeave2-Funktion

ICorProfilerInfo2::GetClassLayout-Methode

ICorProfilerInfo2::GetBoxClassLayout-Methode

ICorProfilerInfo2::GetStringLayout-Methode

ICorProfilerInfo2::GetArrayObjectInfo-Methode

ICorProfilerInfo2::GetThreadStaticAddress-Methode

ICorProfilerInfo2::GetAppDomainStaticAddress-Methode

ICorProfilerInfo2::GetContextStaticAddress-Methode

ICorProfilerInfo2::GetRVAStaticAddress-Methode

Siehe auch

Konzepte

Übersicht über die Profilerstellung