JavaScript 扩展中的本机调试器对象 - 类型对象

本机调试器对象表示调试器环境的各种构造。 JavaScript 扩展可以直接访问基础语言的类型系统。 此访问通过 类型对象的概念来表示。 本主题介绍与类型对象关联的属性。

本机调试器对象表示调试器环境的各种构造和行为。 可以将对象传递到 JavaScript 扩展中或在其中获取,以操控调试器的状态。

有关调试器对象 JavaScript 扩展的信息,请参阅 JavaScript 扩展中的本机调试器对象

有关使用 JavaScript 的一般信息,请参阅 JavaScript 调试器脚本

类型对象

可以通过多种方式获取类型对象:

  • 从对象:如果脚本在 JavaScript 中具有本机对象,则可以在该对象上访问 targetType 属性,以获取表示本机对象的静态类型的 类型对象
  • 从 Host:可以调用 host.getModuleType API,以便为特定模块中定义的任何类型的类型返回 类型对象

获取类型对象后,它具有以下属性:

名称 签名 说明
姓名资产返回类型的名称。
size资产以 64 位值的形式返回类型的大小。
typeKind资产以字符串形式返回类型的类型。 这可以是以下值之一:“udt”、“pointer”、“memberPointer”、“array”、“function”、“typedef”、“enum”或“intrinsic”。
基础类型资产返回作为此类型基础的类型对象。 这不表示C++继承。 对于指针类型,这是所指内容的类型。 对于数组类型,这是数组中包含的类型。
字段资产返回一个对象,该对象包含类型的所有命名字段,并可通过命名属性访问这些字段。 每个属性的值是一个 字段对象 ,如下所示。
baseClasses资产返回类型的所有直接基类的数组。 数组中的每个对象都是 一个基类对象 ,如下所示。
函数返回类型资产对于函数类型,这将返回一个类型对象,该对象表示函数的返回类型。
functionParameterTypes资产对于函数类型,这将返回一个类型对象数组,表示函数的参数类型。
函数调用约定(functionCallingConvention)资产对于函数类型,这将返回函数的调用约定作为字符串。 这可以是以下值之一:“unknown”、“__cdecl”、“fastcall”、“stdcall”或“thiscall”。
pointerKind资产对于指针类型,这会返回字符串形式的指针类型。 这可以是以下值之一:“standard”、“reference”、“rValueReference”或“cxHat”。
memberType 会员类型资产对于属于成员指针的指针类型,这将返回表示成员类的类型对象。
isGeneric资产返回类型是否为泛型类型。 对于模板类型,这将返回 true。
genericArguments资产对于泛型类型,这将返回泛型参数数组。 此类参数可以是类型参数,也可以是常量值。
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 调试器示例脚本