共用方式為


JavaScript 延伸模組中的原生調試程序物件 - 類型物件

原生偵錯工具物件代表偵錯工具環境的各種建構。 JavaScript 擴充功能可以直接存取底層語言的類型系統。 此存取權是透過 類型物件的概念來表示。 本主題說明與類型物件相關聯的屬性。

原生調試程序物件代表調試程式環境的各種建構和行為。 物件可以傳遞至 (或取得) JavaScript 延伸模組,以操作偵錯工具的狀態。

如需偵錯工具物件 JavaScript 延伸模組的相關資訊,請參閱 JavaScript 延伸模組中的原生偵錯工具物件

如需使用 JavaScript 的一般資訊,請參閱 JavaScript 偵錯工具腳本。

類型物件

類型物件可以透過多種方式取得:

  • 從物件:如果指令碼在 JavaScript 中具有原生物件,則可以在該物件上存取 targetType 屬性,以取得代表原生物件靜態類型的 類型物件
  • 從主機:可以呼叫 host.getModuleType API,以傳回特定模組中定義的任何類型的 類型 物件。

取得類型物件之後,它就具有下列屬性:

名稱 簽章 說明
名稱房產傳回類型的名稱。
尺寸房產將類型的大小傳回為 64 位值。
類型房產傳回該類型的種類作為字串。 這可以是下列其中一個值:「udt」、「pointer」、「memberPointer」、「array」、「function」、「typedef」、「enum」或「intrinsic」。
基底類型房產傳回此類型所依據類型的類型物件。 這不代表 C++ 繼承。 對於指標類型,這是指向的物件的類型。 對於陣列類型,這是陣列中包含的類型。
領域房產傳回一個物件,其中包含該類型中所有具名欄位,這些欄位可以作為具名屬性存取。 每個屬性的值都是 欄位物件 ,如下所述。
基底類別房產傳回類型所有直接基底類別的陣列。 陣列中的每個物件都是 基底類別物件 ,如下所述。
函數傳回類型房產對於函式類型,這會傳回代表函式傳回類型的類型物件。
函數參數類型房產對於函數類型,這會傳回代表函數參數類型的類型物件陣列。
函數呼叫慣例房產對於函式類型,這會以字串的形式傳回函式的呼叫慣例。 這可以是下列其中一個值:「未知」、「__cdecl」、「fastcall」、「stdcall」或「thiscall」。
指針種類房產對於指標類型,這會傳回指標類型作為字串。 這可以是下列其中一個值:「標準」、「參考」、「rValueReference」或「cxHat」。
memberType 會員類型房產對於屬於成員指標的指標類型,這會傳回代表成員類別的類型物件。
是泛型房產回傳這個類型是否為泛型。 這個函數會針對範本類型傳回 true。
泛型引數房產對於泛型類型,這將傳回泛型引數陣列。 這類引數可以是類型引數,也可以是常數值。
isBit欄位房產傳回類型的儲存體是否為位元欄位。
位元欄位位置房產對於代表位欄位儲存體的類型,這會傳回位元欄位描述類型,指出位元欄位的位置。

所有這些項目都存在於階段 2 初始化期間。

欄位物件

類型內的每個欄位都由具有以下屬性的欄位物件描述:

名稱 簽章 說明
名稱房產傳回欄位的名稱。
型別房產傳回代表欄位靜態類型的類型物件。
位置類型房產以字串形式傳回欄位的位置種類 (儲存體)。 這可以是下列其中一個值:「member」、「static」、「constant」或「none」。
位移房產對於具有指示偏移的位置類型(例如:「member」)的欄位,這會將其包含類型內欄位的偏移傳回為 64 位元值。
位置房產對於具有指示位置的位置類型(例如:「static」)的欄位,這會將欄位的位置傳回為 位置物件。
價值房產對於具有指示值的位置種類的欄位(例如:「常數」),這會傳回欄位的值。

所有這些項目都存在於階段 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 偵錯工具範例腳本