Objetos de depurador nativos en extensiones de JavaScript: objetos de tipo
Los objetos del depurador nativo representan varias construcciones del entorno del depurador. Las extensiones de JavaScript tienen acceso directo al sistema de tipos del lenguaje subyacente. Este acceso se expresa a través de la noción de objetos de tipo. En este tema se describen las propiedades asociadas a objetos de tipo.
Los objetos del depurador nativo representan diversas construcciones y comportamientos del entorno del depurador. Los objetos se pueden pasar a extensiones de JavaScript (o adquiridas en) para manipular el estado del depurador.
Para obtener información sobre las extensiones de JavaScript del objeto Debugger, vea Objetos de depurador nativo en extensiones de JavaScript.
Para obtener información general sobre cómo trabajar con JavaScript, consulte Scripting del depurador de JavaScript.
Objetos de tipo
Un objeto de tipo se puede adquirir de varias maneras:
- Desde un objeto: si un script tiene un objeto nativo en JavaScript, se puede tener acceso a la propiedad targetType en ese objeto para obtener un objeto de tipo que represente el tipo estático del objeto nativo.
- Desde host: se puede llamar a la API host.getModuleType para devolver el objeto de tipo para cualquier tipo definido en un módulo determinado.
Una vez adquirido el objeto de tipo, tiene las siguientes propiedades:
Nombre | Signature | Descripción |
name | Propiedad | Devuelve el nombre del tipo. |
size | Propiedad | Devuelve el tamaño del tipo como un valor de 64 bits. |
typeKind | Propiedad | Devuelve el tipo del tipo como una cadena. Puede ser uno de los siguientes valores: "udt", "pointer", "memberPointer", "array", "function", "typedef", "enum" o "intrinsic". |
baseType | Propiedad | Devuelve un objeto de tipo para el tipo en el que se basa este tipo. Esto no representa la herencia de C++. Para un tipo de puntero, este es el tipo de lo que apunta. Para un tipo de matriz, este es el tipo contenido en la matriz. |
fields | Propiedad | Devuelve un objeto que tiene todos los campos con nombre del tipo accesibles como propiedades con nombre. El valor de cada propiedad es un objeto de campo como se describe a continuación. |
baseClasses | Propiedad | Devuelve una matriz de todas las clases base inmediatas del tipo . Cada objeto de la matriz es un objeto de clase base como se describe a continuación. |
functionReturnType | Propiedad | Para los tipos de función, devuelve un objeto de tipo que representa el tipo de valor devuelto de la función. |
functionParameterTypes | Propiedad | Para los tipos de función, devuelve una matriz de objetos de tipo que representan los tipos de parámetro de la función. |
functionCallingConvention | Propiedad | Para los tipos de función, devuelve la convención de llamada de la función como una cadena. Puede ser uno de los siguientes valores: "unknown", "__cdecl", "fastcall", "stdcall" o "thiscall". |
pointerKind | Propiedad | Para los tipos de puntero, devuelve el tipo de puntero como una cadena. Puede ser uno de los siguientes valores: "standard", "reference", "rValueReference" o "cxHat". |
memberType | Propiedad | Para los tipos de puntero que son punteros de miembro, devuelve un objeto de tipo que representa la clase miembro. |
isGeneric | Propiedad | Devuelve si el tipo es genérico o no. Esto devolverá true para los tipos de plantilla. |
genericArguments | Propiedad | Para los tipos que son genéricos, devolverá una matriz de argumentos genéricos. Estos argumentos pueden ser argumentos de tipo o pueden ser valores constantes. |
isBitField | Propiedad | Devuelve si el almacenamiento del tipo es un campo de bits o no. |
bitFieldPositions | Propiedad | Para los tipos que representan el almacenamiento de campo de bits, devolverá un tipo de descripción de campo de bits que indica las posiciones del campo de bits. |
Todas estas entradas están presentes durante la inicialización de la fase 2.
Objetos field
Cada campo de un tipo se describe mediante un objeto de campo que tiene propiedades de la siguiente manera:
Nombre | Signature | Descripción |
name | Propiedad | Devuelve el nombre del campo. |
type | Propiedad | Devuelve un objeto de tipo que representa el tipo estático del campo. |
locationKind | Propiedad | Devuelve el tipo de ubicación (almacenamiento) del campo como una cadena. Puede ser uno de los siguientes valores: "member", "static", "constant" o "none". |
offset | Propiedad | Para los campos que tienen un tipo de ubicación que indica un desplazamiento (por ejemplo, "miembro"), devuelve el desplazamiento del campo dentro de su tipo contenedor como un valor de 64 bits. |
ubicación | Propiedad | Para los campos que tienen un tipo de ubicación que indica una ubicación (por ejemplo, "estática"), devuelve la ubicación del campo como un objeto de ubicación. |
value | Propiedad | Para los campos que tienen un tipo de ubicación que indica un valor (por ejemplo, "constante"), devuelve el valor del campo. |
Todas estas entradas están presentes durante la inicialización de la fase 2.
Objetos de clase base
Cada clase base dentro de un tipo se describe mediante un objeto de clase base que tiene propiedades de la siguiente manera:
Nombre | Signature | Descripción |
name | Propiedad | Devuelve el nombre de la clase base. |
offset | Propiedad | Devuelve el desplazamiento de esta clase base dentro de su tipo contenedor. |
type | Propiedad | Devuelve un objeto de tipo que representa el tipo estático de la clase base. |
Todas estas entradas están presentes durante la inicialización de la fase 2.
Ejemplo de código
Para obtener un ejemplo de código, consulte el script ImageInfo.js. Para obtener más información sobre los ejemplos de código, vea Scripts de ejemplo del depurador de 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);
Vea también
Objetos de depurador nativos en extensiones de JavaScript
Objetos de depurador nativos en extensiones de JavaScript: consideraciones de diseño y pruebas