原生偵錯工具物件代表偵錯工具環境的各種建構。 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);