JavaScript 扩展中的本机调试器对象 - 类型对象
本机调试器对象表示调试器环境的各种构造。 JavaScript 扩展可直接访问基础语言的类型系统。 此访问通过 类型对象的概念表示。 本主题介绍与类型对象关联的属性。
本机调试器对象表示调试器环境的各种构造和行为。 这些对象可以传递到 (,也可以在) JavaScript 扩展中获取,以操作调试器的状态。
有关调试器对象 JavaScript 扩展的信息,请参阅 JavaScript 扩展中的本机调试器对象。
有关使用 JavaScript 的一般信息,请参阅 JavaScript 调试器脚本。
类型对象
可以通过多种方式获取类型对象:
- 从 对象:如果脚本在 JavaScript 中具有本机对象,则可以在该对象上访问 targetType 属性,以获取表示本机对象的静态类型的 类型对象 。
- 从主机:可以调用 host.getModuleType API,以便返回特定模块中定义的任何类型的类型 对象 。
获取类型对象后,它具有以下属性:
名称 | Signature | 说明 |
name | 属性 | 返回类型的名称。 |
大小 | properties | 以 64 位值的形式返回类型的大小。 |
typeKind | properties | 以字符串形式返回类型的类型。 这可以是以下值之一:“udt”、“pointer”、“memberPointer”、“array”、“function”、“typedef”、“enum”或“intrinsic”。 |
baseType | properties | 返回此类型所基于的类型的类型对象。 这不表示 C++ 继承。 对于指针类型,这是指向的对象的类型。 对于数组类型,这是数组中包含的类型。 |
fields | 属性 | 返回一个 对象,该对象具有作为命名属性可访问的类型的所有命名字段。 每个属性的值都是 一个字段对象 ,如下所述。 |
baseClasses | properties | 返回类型的所有直接基类的数组。 数组中的每个对象都是 一个基类对象 ,如下所述。 |
functionReturnType | 属性 | 对于函数类型,这将返回一个类型对象,该对象表示函数的返回类型。 |
functionParameterTypes | properties | 对于函数类型,这将返回类型对象的数组,表示函数的参数类型。 |
functionCallingConvention | properties | 对于函数类型,这会将函数的调用约定作为字符串返回。 这可以是以下值之一:“unknown”、“__cdecl”、“fastcall”、“stdcall”或“thiscall”。 |
pointerKind | properties | 对于指针类型,这将返回字符串形式的指针类型。 这可以是以下值之一:“standard”、“reference”、“rValueReference”或“cxHat”。 |
memberType | properties | 对于作为成员指针的指针类型,这将返回表示成员类的类型对象。 |
isGeneric | properties | 返回类型是否为泛型。 这将为模板类型返回 true。 |
genericArguments | properties | 对于泛型类型,这将返回泛型参数数组。 此类参数可以是类型参数,也可以是常量值。 |
isBitField | properties | 返回类型的存储是否为位字段。 |
bitFieldPositions | properties | 对于表示位字段存储的类型,这将返回一个位字段说明类型,指示位字段的位置。 |
所有这些条目在阶段 2 初始化期间都存在。
Field 对象
类型中的每个字段由具有属性的字段对象描述,如下所示:
名称 | Signature | 说明 |
name | 属性 | 返回字段的名称。 |
type | properties | 返回一个类型对象,该对象表示字段的静态类型。 |
locationKind | properties | 以字符串的形式返回字段 (存储) 的位置类型。 这可以是以下值之一:“member”、“static”、“constant”或“none”。 |
offset | properties | 对于具有指示偏移量 (例如:“member”) 的位置类型的字段,这将返回其包含类型中字段的偏移量为 64 位值。 |
location | properties | 对于具有指示位置 (位置的字段,例如:“static”) ,这将返回字段的位置作为 位置对象。 |
值 | 属性 | 对于具有指示值 ((例如:“constant”) )的位置类型的字段,这将返回字段的值。 |
所有这些条目在阶段 2 初始化期间都存在。
基类对象
类型中的每个基类由具有属性的基类对象描述,如下所示:
名称 | Signature | 说明 |
name | 属性 | 返回基类的名称。 |
offset | properties | 返回此基类在其包含类型中的偏移量。 |
type | properties | 返回一个类型对象,该对象表示基类的静态类型。 |
所有这些条目在阶段 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);