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

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

本机调试器对象表示调试器环境的各种构造和行为。 这些对象可以传递到 (,也可以在) JavaScript 扩展中获取,以操作调试器的状态。

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

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

类型对象

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

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

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

名称Signature说明
name属性返回类型的名称。
大小properties以 64 位值的形式返回类型的大小。
typeKindproperties以字符串形式返回类型的类型。 这可以是以下值之一:“udt”、“pointer”、“memberPointer”、“array”、“function”、“typedef”、“enum”或“intrinsic”。
baseTypeproperties返回此类型所基于的类型的类型对象。 这不表示 C++ 继承。 对于指针类型,这是指向的对象的类型。 对于数组类型,这是数组中包含的类型。
fields属性返回一个 对象,该对象具有作为命名属性可访问的类型的所有命名字段。 每个属性的值都是 一个字段对象 ,如下所述。
baseClassesproperties返回类型的所有直接基类的数组。 数组中的每个对象都是 一个基类对象 ,如下所述。
functionReturnType属性对于函数类型,这将返回一个类型对象,该对象表示函数的返回类型。
functionParameterTypesproperties对于函数类型,这将返回类型对象的数组,表示函数的参数类型。
functionCallingConventionproperties对于函数类型,这会将函数的调用约定作为字符串返回。 这可以是以下值之一:“unknown”、“__cdecl”、“fastcall”、“stdcall”或“thiscall”。
pointerKindproperties对于指针类型,这将返回字符串形式的指针类型。 这可以是以下值之一:“standard”、“reference”、“rValueReference”或“cxHat”。
memberTypeproperties对于作为成员指针的指针类型,这将返回表示成员类的类型对象。
isGenericproperties返回类型是否为泛型。 这将为模板类型返回 true。
genericArgumentsproperties对于泛型类型,这将返回泛型参数数组。 此类参数可以是类型参数,也可以是常量值。
isBitFieldproperties返回类型的存储是否为位字段。
bitFieldPositionsproperties对于表示位字段存储的类型,这将返回一个位字段说明类型,指示位字段的位置。

所有这些条目在阶段 2 初始化期间都存在。

Field 对象

类型中的每个字段由具有属性的字段对象描述,如下所示:

名称Signature说明
name属性返回字段的名称。
typeproperties返回一个类型对象,该对象表示字段的静态类型。
locationKindproperties以字符串的形式返回字段 (存储) 的位置类型。 这可以是以下值之一:“member”、“static”、“constant”或“none”。
offsetproperties对于具有指示偏移量 (例如:“member”) 的位置类型的字段,这将返回其包含类型中字段的偏移量为 64 位值。
locationproperties对于具有指示位置 (位置的字段,例如:“static”) ,这将返回字段的位置作为 位置对象。
属性对于具有指示值 ((例如:“constant”) )的位置类型的字段,这将返回字段的值。

所有这些条目在阶段 2 初始化期间都存在。

基类对象

类型中的每个基类由具有属性的基类对象描述,如下所示:

名称Signature说明
name属性返回基类的名称。
offsetproperties返回此基类在其包含类型中的偏移量。
typeproperties返回一个类型对象,该对象表示基类的静态类型。

所有这些条目在阶段 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 调试器示例脚本