共用方式為


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);

另請參閱

JavaScript 延伸模組中的原生偵錯工具物件

JavaScript 延伸模組中的原生偵錯工具物件 - 設計和測試考慮

JavaScript 偵錯工具腳本

JavaScript 偵錯工具範例腳本