Freigeben über


Native Debugger-Objekte in JavaScript-Erweiterungen - Typenobjekte

Systemeigene Debuggerobjekte stellen verschiedene Konstrukte der Debuggerumgebung dar. JavaScript-Erweiterungen haben direkten Zugriff auf das Typsystem der zugrunde liegenden Sprache. Dieser Zugriff wird durch den Begriff der Typobjekte ausgedrückt. In diesem Thema werden die Eigenschaften beschrieben, die mit Typobjekten verknüpft sind.

Systemeigene Debuggerobjekte stellen verschiedene Konstrukte und Verhaltensweisen der Debuggerumgebung dar. Die Objekte können an JavaScript-Erweiterungen übergeben (oder erworben werden), um den Zustand des Debuggers zu bearbeiten.

Informationen zu JavaScript-Erweiterungen des Debuggerobjekts finden Sie unter Native Debugger Objects in JavaScript Extensions.

Allgemeine Informationen zum Arbeiten mit JavaScript finden Sie unter JavaScript Debugger Scripting.

Typobjekte

Ein Typobjekt kann auf verschiedene Arten abgerufen werden:

  • Aus einem Objekt: Wenn ein Skript über ein systemeigenes Objekt in JavaScript verfügt, kann auf die targetType-Eigenschaft für dieses Objekt zugegriffen werden, um ein Typobjekt abzurufen, das den statischen Typ des nativen Objekts darstellt.
  • Vom Host: Die host.getModuleType-API kann aufgerufen werden, um das Typobjekt für jeden Typ zurückzugeben, der in einem bestimmten Modul definiert ist.

Nachdem das Typobjekt abgerufen wurde, verfügt es über die folgenden Eigenschaften:

Name Signatur- Beschreibung
NameEigentumGibt den Namen des Typs zurück.
GrößeEigentumGibt die Größe des Typs als 64-Bit-Wert zurück.
typeKindEigentumGibt die Art des Typs als Zeichenfolge zurück. Dies kann einer der folgenden Werte sein: "udt", "pointer", "memberPointer", "array", "function", "typedef", "enum" oder "systemintern".
Basis-TypEigentumGibt ein Typobjekt für den Typ zurück, auf dem dieser Typ basiert. Dies stellt keine C++-Vererbung dar. Bei einem Zeigertyp ist dies der Typ des Punkts, auf den verwiesen wird. Bei einem Arraytyp ist dies der Typ, der im Array enthalten ist.
FelderEigentumGibt ein Objekt zurück, das alle benannten Felder des Typs enthält, auf die als benannte Eigenschaften zugegriffen werden kann. Der Wert jeder Eigenschaft ist ein Feldobjekt , wie unten beschrieben.
baseClassesEigentumGibt ein Array aller unmittelbaren Basisklassen des Typs zurück. Jedes Objekt im Array ist ein Basisklassenobjekt , wie unten beschrieben.
functionReturnTypeEigentumBei Funktionstypen gibt dies ein Typobjekt zurück, das den Rückgabetyp der Funktion darstellt.
FunktionParameterTypenEigentumBei Funktionstypen gibt dies ein Array von Typobjekten zurück, das die Parametertypen der Funktion darstellt.
FunktionsaufrufkonventionEigentumBei Funktionstypen gibt dies die aufrufende Konvention der Funktion als Zeichenfolge zurück. Dies kann einer der folgenden Werte sein: "unknown", "__cdecl", "fastcall", "stdcall" oder "thiscall".
pointerKindEigentumBei Zeigertypen gibt dies die Art des Zeigers als Zeichenfolge zurück. Dabei kann es sich um einen der folgenden Werte handeln: "standard", "reference", "rValueReference" oder "cxHat".
memberTypeEigentumBei Zeigertypen, die Memberzeiger sind, gibt dies ein Typobjekt zurück, das die Memberklasse darstellt.
isGenericEigentumGibt zurück, ob der Typ generisch ist oder nicht. Dies gibt true für Vorlagentypen zurück.
Generische ArgumenteEigentumBei Generischen Typen gibt dies ein Array von generischen Argumenten zurück. Solche Argumente können Typargumente sein oder konstante Werte sein.
isBitFieldEigentumGibt zurück, ob der Speicher für den Typ ein Bitfeld ist oder nicht.
BitfeldpositionenEigentumBei Typen, die Bitfeldspeicher darstellen, gibt dies einen Bitfeldbeschreibungstyp zurück, der die Positionen des Bitfelds angibt.

Alle diese Einträge sind während der Initialisierung der Phase 2 vorhanden.

Field-Objekte

Jedes Feld innerhalb eines Typs wird von einem Feldobjekt mit Eigenschaften wie folgt beschrieben:

Name Signatur- Beschreibung
NameEigentumGibt den Namen des Felds zurück.
TypEigentumGibt ein Typobjekt zurück, das den statischen Typ des Felds darstellt.
locationKindEigentumGibt den Speicherorttyp (Speicher) für das Feld als Zeichenfolge zurück. Dies kann einer der folgenden Werte sein: "member", "static", "constant" oder "none".
OffsetEigentumBei Feldern mit einer Lageart, die einen Offset angibt (z. B. "Mitglied"), gibt dies den Offset des Feldes innerhalb des übergeordneten Typs als 64-Bit-Wert zurück.
StandortEigentumBei Feldern mit einer Positionsart, die eine Position angibt (z. B. "statisch"), gibt dies die Position des Felds als Ortsobjekt zurück.
WertEigentumBei Feldern mit einer Positionsart, die einen Wert angibt (z. B. "Konstante"), gibt dies den Wert des Felds zurück.

Alle diese Einträge sind während der Initialisierung der Phase 2 vorhanden.

Basisklassenobjekte

Jede Basisklasse innerhalb eines Typs wird von einem Basisklassenobjekt mit Eigenschaften wie folgt beschrieben:

Name Signatur- Beschreibung
NameEigentumGibt den Namen der Basisklasse zurück.
OffsetEigentumGibt den Offset dieser Basisklasse innerhalb des enthaltenden Typs zurück.
TypEigentumGibt ein Typobjekt zurück, das den statischen Typ der Basisklasse darstellt.

Alle diese Einträge sind während der Initialisierung der Phase 2 vorhanden.

Codebeispiel

Ein Codebeispiel finden Sie im ImageInfo.js Skript. Weitere Informationen zu Codebeispielen finden Sie unter JavaScript-Debuggerbeispielskripts.

// fieldType references basic types that should be present in **ANY** symbolic information.
// Just grab the first module as the "reference module" for this purpose.  We cannot grab
// "ntdll" generically as we want to avoid a situation in which the debugger opens a module (-z ...)
// from failing.
//
var moduleName = contextInheritorModule.__ComparisonName;
var typeObject = host.getModuleType(moduleName, field.fieldType, contextInheritorModule);
var result = host.createTypedObject(addr, typeObject);

Siehe auch

native Debuggerobjekte in JavaScript-Erweiterungen

Native Debugger-Objekte in JavaScript-Erweiterungen – Entwurfs- und Testüberlegungen

JavaScript-Debugging-Skripting

JavaScript-Debuggerbeispielskripts