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