本机调试器对象表示调试器环境的各种构造。 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);