JavaScript 拡張機能のネイティブ デバッガー オブジェクト - 型オブジェクト
ネイティブ デバッガー オブジェクトは、デバッガー環境のさまざまな構成を表します。 JavaScript 拡張機能は、基になる言語の型システムに直接アクセスできます。 このアクセスは タイプ オブジェクト の概念を通じて表現されます。 このトピックでは、型オブジェクトに関連付けられているプロパティについて説明します。
ネイティブ デバッガー オブジェクトは、デバッガー環境のさまざまなコンストラクトと動作を表します。 オブジェクトを JavaScript 拡張機能に渡したり、取得したりして、デバッガーの状態を操作できます。
デバッガー オブジェクトの JavaScript 拡張機能の詳細については JavaScript 拡張機能のネイティブ デバッガー オブジェクト」を参照してください。
JavaScript の使用に関する一般情報については JavaScript デバッガー スクリプトを参照してください.
タイプオブジェクト
型オブジェクトは、さまざまな方法で取得できます。
- オブジェクトから: スクリプトに JavaScript 内にネイティブ オブジェクトがある場合、ネイティブ オブジェクトの静的型を表す type object を取得するために、そのオブジェクトの targetType プロパティにアクセスできます。
- Host から: host.getModuleType API を呼び出して、特定のモジュールで定義されている任意の型の 型オブジェクト を返すことができます。
型オブジェクトを取得すると、次のプロパティが取得されます。
名前 | Signature | 説明 |
name | プロパティ | 型の名前を返します。 |
size | プロパティ | 型のサイズを 64 ビット値として返します。 |
typeKind | プロパティ | 型の種類を文字列として返します。 "udt"、"pointer"、"memberPointer"、"array"、"function"、"typedef"、"enum"、または "intrinsic" のいずれかの値を指定できます。 |
baseType | プロパティ | この型の基になっている型の型オブジェクトを返します。 これは C++ の継承を表していません。 ポインター型の場合、これは指すオブジェクトの型です。 配列型の場合、これは配列に含まれる型です。 |
fields | プロパティ | 名前付きプロパティとしてアクセスできる型のすべての名前付きフィールドを持つオブジェクトを返します。 各プロパティの値は、以下で説明する フィールド オブジェクト です。 |
baseClasses | プロパティ | 型のすべての即時基底クラスの配列を返します。 配列内の各オブジェクトは、以下で説明する 基本クラス オブジェクト です。 |
functionReturnType | プロパティ | 関数型の場合、関数の戻り値の型を表す型オブジェクトが返されます。 |
functionParameterTypes | プロパティ | 関数型の場合、関数のパラメーター型を表すオブジェクト型の配列を返します。 |
functionCallingConvention | プロパティ | 関数型の場合、これは関数の呼び出し規約を文字列として返します。 "unknown"、"__cdecl"、"fastcall"、"stdcall"、または "thiscall" のいずれかの値を指定できます。 |
pointerKind | プロパティ | ポインター型の場合、これはポインターの種類を文字列として返します。 "standard"、"reference"、"rValueReference"、または "cxHat" のいずれかの値を指定できます。 |
memberType | プロパティ | メンバー ポインターであるポインター型の場合、メンバー クラスを表す型オブジェクトが返されます。 |
isGeneric | プロパティ | 型がジェネリックかどうかを返します。 テンプレート型の場合は true が返されます。 |
genericArguments | プロパティ | ジェネリック型の場合、ジェネリック引数の配列が返されます。 このような引数は、型引数でも定数値でもかまいません。 |
isBitField | プロパティ | 型のストレージがビットフィールドかどうかを返します。 |
bitFieldPositions | プロパティ | ビットフィールド ストレージを表す型の場合、ビットフィールドの位置を示すビット フィールド記述型が返されます。 |
これらのエントリはすべて、フェーズ 2 の初期化中に存在します。
フィールドオブジェクト
型内の各フィールドは、プロパティを持つフィールド オブジェクトによって次のように記述されます。
名前 | Signature | 説明 |
name | プロパティ | フィールドの名前を返します。 |
type | プロパティ | フィールドの静的な型を表す型オブジェクトを返します。 |
locationKind | プロパティ | フィールドの場所の種類 (ストレージ) を文字列として返します。 "member"、"static"、"constant"、または "none" のいずれかの値を指定できます。 |
オフセット | プロパティ | オフセット (例: "member") を示す場所の種類を持つフィールドの場合、これは、その格納型内のフィールドのオフセットを 64 ビット値として返します。 |
location | プロパティ | 場所を示す場所の種類を持つフィールド (例: "static") の場合、これはフィールドの位置を場所オブジェクトとして 返します。 |
値 | プロパティ | 値を示す場所の種類 (例: "constant") を持つフィールドの場合、フィールドの値が返されます。 |
これらのエントリはすべて、フェーズ 2 の初期化中に存在します。
基底クラス オブジェクト
型内の各基底クラスは、プロパティを持つ基底クラス オブジェクトによって次のように記述されます。
名前 | Signature | 説明 |
name | プロパティ | 基本クラスの名前を返します。 |
オフセット | プロパティ | この基底クラスの包含型内のオフセットを返します。 |
type | プロパティ | 基本クラスの静的型を表す型オブジェクトを返します。 |
これらのエントリはすべて、フェーズ 2 の初期化中に存在します。
コード例
コード例については、ImageInfo.js スクリプトを参照してください。 コード サンプルの詳細については JavaScript デバッガーのサンプル スクリプト」を参照してください。
// 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);
関連項目
JavaScript 拡張機能のネイティブ デバッガー オブジェクト