JavaScript 延伸模組中的原生偵錯工具物件 - 類型物件
原生偵錯工具物件代表偵錯工具環境的各種建構。 JavaScript 延伸模組可直接存取基礎語言的類型系統。 此存取是透過 類型物件的概念來表示。 本主題描述與類型物件相關聯的屬性。
原生偵錯工具物件代表偵錯工具環境的各種建構和行為。 物件可以傳入 (,或在 javaScript 延伸模組) 取得,以操作偵錯工具的狀態。
如需偵錯工具物件 JavaScript 延伸模組的詳細資訊,請參閱 JavaScript 延伸模組中的原生偵錯工具物件。
如需使用 JavaScript 的一般資訊,請參閱 JavaScript 偵錯工具腳本。
類型物件
有幾種方式可以取得類型物件:
- 從物件:如果腳本在 JavaScript 內有原生物件,則可以在該物件上存取 targetType 屬性,以取得代表原生物件的靜態型別的類型 物件 。
- 從 Host:可以呼叫 host.getModuleType API,以傳回特定模組中定義之任何 類型的類型物件 。
取得類型物件之後,其具有下列屬性:
名稱 | 簽章 | 說明 |
NAME | 屬性 | 傳回型別的名稱。 |
{1}size{2} | 屬性 | 傳回類型的大小做為 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 初始化期間出現。
Field 物件
類型中的每個欄位都會由具有屬性的欄位物件描述,如下所示:
名稱 | 簽章 | 說明 |
NAME | 屬性 | 傳回功能變數名稱。 |
類型 | 屬性 | 傳回類型物件,代表欄位的靜態類型。 |
locationKind | 屬性 | 傳回欄位的位置種類 (儲存體) 為字串。 這可以是下列其中一個值:「member」、「static」、「constant」 或 「none」。 |
Offset | 屬性 | 對於具有位置類型的欄位,表示位移 (例如:「member」) ,這會以 64 位值傳回其內含型別內的欄位位移。 |
location | 屬性 | 對於具有位置類型的欄位,表示位置 (例如:「static」) ,這會傳回欄位的位置做為 位置物件。 |
value | 屬性 | 對於位置種類表示值 (的欄位,例如:「constant」) ,這會傳回欄位的值。 |
在階段 2 初始化期間,所有這些專案都會存在。
基類物件
類型中的每個基類都會由具有屬性的基類物件描述,如下所示:
名稱 | 簽章 | 說明 |
NAME | 屬性 | 傳回基類的名稱。 |
Offset | 屬性 | 傳回這個基類在其包含型別內的位移。 |
類型 | 屬性 | 傳回型別物件,表示基類的靜態型別。 |
在階段 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);