次の方法で共有


JavaScript 拡張機能のネイティブ デバッガー オブジェクト - 型オブジェクト

ネイティブ デバッガー オブジェクトは、デバッガー環境のさまざまなコンストラクトを表します。 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 拡張機能 でのネイティブ デバッガー オブジェクトの

JavaScript 拡張機能のネイティブ デバッガー オブジェクト - 設計とテストに関する考慮事項

JavaScript デバッガースクリプト

JavaScript デバッガーのスクリプトの例