Native Debuggerobjekte in JavaScript-Erweiterungen – Typobjekte
Native Debuggerobjekte stellen verschiedene Konstrukte der Debuggerumgebung dar. JavaScript-Erweiterungen haben direkten Zugriff auf das Typsystem der zugrunde liegenden Sprache. Dieser Zugriff wird durch das Konzept von Typobjekten ausgedrückt. In diesem Thema werden die Eigenschaften beschrieben, die Typobjekten zugeordnet sind.
Native Debuggerobjekte stellen verschiedene Konstrukte und Verhaltensweisen der Debuggerumgebung dar. Die Objekte können an JavaScript-Erweiterungen übergeben (oder in abgerufen werden), um den Zustand des Debuggers zu bearbeiten.
Informationen zu JavaScript-Erweiterungen des Debuggerobjekts finden Sie unter Native Debuggerobjekte in JavaScript-Erweiterungen.
Allgemeine Informationen zum Arbeiten mit JavaScript finden Sie unter JavaScript-Debuggerskripterstellung.
Typobjekte
Ein Typobjekt kann auf verschiedene Arten abgerufen werden:
- Aus einem Objekt: Wenn ein Skript über ein natives 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.
- Aus dem Host: Die host.getModuleType-API kann aufgerufen werden, um das Typobjekt für einen beliebigen Typ zurückzugeben, der in einem bestimmten Modul definiert ist.
Nachdem das Typobjekt abgerufen wurde, verfügt es über die folgenden Eigenschaften:
Name | Signature | Beschreibung |
name | Eigenschaft | Gibt den Namen des Typs zurück. |
size | Eigenschaft | Gibt die Größe des Typs als 64-Bit-Wert zurück. |
Typekind | Eigenschaft | Gibt die Art des Typs als Zeichenfolge zurück. Dies kann einer der folgenden Werte sein: "udt", "zeiger", "memberPointer", "array", "function", "typedef", "enum" oder "intrinsic". |
baseType | Eigenschaft | Gibt 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 der Sache, auf die verwiesen wird. Bei einem Arraytyp ist dies der Typ, der im Array enthalten ist. |
fields | Eigenschaft | Gibt ein -Objekt zurück, das über alle benannten Felder des Typs verfügt, auf die als benannte Eigenschaften zugegriffen werden kann. Der Wert jeder Eigenschaft ist ein Feldobjekt , wie unten beschrieben. |
baseClasses | Eigenschaft | Gibt ein Array aller unmittelbaren Basisklassen des Typs zurück. Jedes Objekt im Array ist wie unten beschrieben ein Basisklassenobjekt . |
functionReturnType | Eigenschaft | Für Funktionstypen wird ein Typobjekt zurückgegeben, das den Rückgabetyp der Funktion darstellt. |
functionParameterTypes | Eigenschaft | Für Funktionstypen gibt dies ein Array von Typobjekten zurück, die die Parametertypen der Funktion darstellen. |
functionCallingConvention | Eigenschaft | Bei Funktionstypen gibt die Aufrufkonvention der Funktion als Zeichenfolge zurück. Dies kann einer der folgenden Werte sein: "unknown", "__cdecl", "fastcall", "stdcall" oder "thiscall". |
pointerKind | Eigenschaft | Bei Zeigertypen gibt die Art des Zeigers als Zeichenfolge zurück. Dies kann einer der folgenden Werte sein: "standard", "reference", "rValueReference" oder "cxHat". |
memberType | Eigenschaft | Bei Zeigertypen, die Memberzeiger sind, wird ein Typobjekt zurückgegeben, das die Memberklasse darstellt. |
isGeneric | Eigenschaft | Gibt zurück, ob der Typ generisch ist oder nicht. Dies gibt true für Vorlagentypen zurück. |
genericArguments | Eigenschaft | Für typen, die generisch sind, wird ein Array generischer Argumente zurückgegeben. Solche Argumente können Typargumente oder konstante Werte sein. |
isBitField | Eigenschaft | Gibt zurück, ob der Speicher für den Typ ein Bitfeld ist oder nicht. |
bitFieldPositions | Eigenschaft | Für Typen, die den Bitfeldspeicher darstellen, wird ein Bitfeldbeschreibungstyp zurückgegeben, der die Positionen des Bitfelds angibt. |
Alle diese Einträge sind während der Initialisierung in Phase 2 vorhanden.
Field-Objekte
Jedes Feld innerhalb eines Typs wird durch ein Feldobjekt mit folgenden Eigenschaften beschrieben:
Name | Signature | Beschreibung |
name | Eigenschaft | Gibt den Namen des Felds zurück. |
type | Eigenschaft | Gibt ein Typobjekt zurück, das den statischen Typ des Felds darstellt. |
locationKind | Eigenschaft | Gibt die Standortart (Speicher) für das Feld als Zeichenfolge zurück. Dies kann einer der folgenden Werte sein: "member", "static", "constant" oder "none". |
offset | Eigenschaft | Bei Feldern mit einer Positionsart, die einen Offset angibt (z. B. "Member"), gibt dies den Offset des Felds innerhalb des enthaltenden Typs als 64-Bit-Wert zurück. |
location | Eigenschaft | Bei Feldern, die über eine Positionsart verfügen, die eine Position angibt (z. B. "statisch"), gibt dies die Position des Felds als Positionsobjekt zurück. |
value | Eigenschaft | Für Felder, die eine Positionsart aufweisen, die einen Wert angibt (z. B. "konstant"), gibt dies den Wert des Felds zurück. |
Alle diese Einträge sind während der Initialisierung in Phase 2 vorhanden.
Basisklassenobjekte
Jede Basisklasse innerhalb eines Typs wird durch ein Basisklassenobjekt mit folgenden Eigenschaften beschrieben:
Name | Signature | Beschreibung |
name | Eigenschaft | Gibt den Namen der Basisklasse zurück. |
offset | Eigenschaft | Gibt den Offset dieser Basisklasse innerhalb des enthaltenden Typs zurück. |
type | Eigenschaft | Gibt ein Typobjekt zurück, das den statischen Typ der Basisklasse darstellt. |
Alle diese Einträge sind während der Initialisierung in Phase 2 vorhanden.
Codebeispiel
Ein Codebeispiel finden Sie im ImageInfo.js-Skript. Weitere Informationen zu Codebeispielen finden Sie unter Beispielskripts für JavaScript-Debugger.
// 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 Debuggerobjekte in JavaScript-Erweiterungen : Überlegungen zu Entwurf und Test