Objetos nativos do depurador em extensões JavaScript – Objetos de tipo
Objetos de depurador nativos representam vários constructos do ambiente do depurador. As extensões JavaScript têm acesso direto ao sistema de tipos da linguagem subjacente. Esse acesso é expresso por meio da noção de objetos de tipo. Este tópico descreve as propriedades associadas aos objetos de tipo.
Objetos de depurador nativos representam vários constructos e comportamentos do ambiente do depurador. Os objetos podem ser passados para extensões JavaScript (ou adquiridas em) para manipular o estado do depurador.
Para obter informações sobre extensões JavaScript de objeto de depurador, consulte Native Debugger Objects in JavaScript Extensions.
Para obter informações gerais sobre como trabalhar com JavaScript, consulte Scripts do Depurador javaScript.
Objetos de tipo
Um objeto de tipo pode ser adquirido de várias maneiras:
- De um Objeto: se um script tiver um objeto nativo no JavaScript, a propriedade targetType poderá ser acessada nesse objeto para obter um objeto de tipo que representa o tipo estático do objeto nativo.
- No Host: a API host.getModuleType pode ser chamada para retornar o objeto de tipo para qualquer tipo definido em um módulo específico.
Depois que o objeto de tipo é adquirido, ele tem as seguintes propriedades:
Nome | Signature | Descrição |
name | Propriedade | Retorna o nome do tipo. |
size | Propriedade | Retorna o tamanho do tipo como um valor de 64 bits. |
Typekind | Propriedade | Retorna o tipo do tipo como uma cadeia de caracteres. Esse pode ser um dos seguintes valores: "udt", "pointer", "memberPointer", "array", "function", "typedef", "enum" ou "intrínseco". |
Basetype | Propriedade | Retorna um objeto de tipo para o tipo no qual esse tipo se baseia. Isso não representa a herança do C++. Para um tipo de ponteiro, esse é o tipo da coisa apontada. Para um tipo de matriz, esse é o tipo contido na matriz. |
fields | Propriedade | Retorna um objeto que tem todos os campos nomeados do tipo acessíveis como propriedades nomeadas. O valor de cada propriedade é um objeto de campo , conforme descrito abaixo. |
baseClasses | Propriedade | Retorna uma matriz de todas as classes base imediatas do tipo. Cada objeto na matriz é um objeto de classe base , conforme descrito abaixo. |
Functionreturntype | Propriedade | Para tipos de função, isso retorna um objeto de tipo que representa o tipo de retorno da função. |
functionParameterTypes | Propriedade | Para tipos de função, isso retorna uma matriz de objetos de tipo que representam os tipos de parâmetro da função. |
functionCallingConvention | Propriedade | Para tipos de função, isso retorna a convenção de chamada da função como uma cadeia de caracteres. Esse pode ser um dos seguintes valores: "desconhecido", "__cdecl", "fastcall", "stdcall" ou "thiscall". |
pointerKind | Propriedade | Para tipos de ponteiro, isso retorna o tipo de ponteiro como uma cadeia de caracteres. Esse pode ser um dos seguintes valores: "standard", "reference", "rValueReference" ou "cxHat". |
memberType | Propriedade | Para tipos de ponteiro que são ponteiros de membro, isso retorna um objeto de tipo que representa a classe membro. |
isGeneric | Propriedade | Retorna se o tipo é genérico ou não. Isso retornará true para tipos de modelo. |
genericArguments | Propriedade | Para tipos genéricos, isso retornará uma matriz de argumentos genéricos. Esses argumentos podem ser argumentos de tipo ou podem ser valores constantes. |
isBitField | Propriedade | Retorna se o armazenamento do tipo é um campo de bits ou não. |
bitFieldPositions | Propriedade | Para tipos que representam o armazenamento de campo bit, isso retornará um tipo de descrição de campo de bits indicando as posições do campo de bits. |
Todas essas entradas estão presentes durante a inicialização da fase 2.
Objetos field
Cada campo dentro de um tipo é descrito por um objeto de campo que tem propriedades da seguinte maneira:
Nome | Signature | Descrição |
name | Propriedade | Retorna o nome do campo. |
type | Propriedade | Retorna um objeto de tipo que representa o tipo estático do campo. |
locationKind | Propriedade | Retorna o tipo de local (armazenamento) para o campo como uma cadeia de caracteres. Esse pode ser um dos seguintes valores: "member", "static", "constant" ou "none". |
deslocamento | Propriedade | Para campos que têm um tipo de localização que indica um deslocamento (por exemplo, "membro"), isso retorna o deslocamento do campo dentro de seu tipo de contenção como um valor de 64 bits. |
local | Propriedade | Para campos que têm um tipo de localização que indica um local (por exemplo, "estático"), isso retorna o local do campo como um objeto de localização. |
value | Propriedade | Para campos que têm um tipo de local que indica um valor (por exemplo, "constante"), isso retorna o valor do campo. |
Todas essas entradas estão presentes durante a inicialização da fase 2.
Objetos de classe base
Cada classe base dentro de um tipo é descrita por um objeto de classe base que tem propriedades da seguinte maneira:
Nome | Signature | Descrição |
name | Propriedade | Retorna o nome da classe base. |
deslocamento | Propriedade | Retorna o deslocamento dessa classe base dentro de seu tipo que contém. |
type | Propriedade | Retorna um objeto de tipo que representa o tipo estático da classe base. |
Todas essas entradas estão presentes durante a inicialização da fase 2.
Exemplo de código
Para obter um exemplo de código, consulte o script ImageInfo.js. Para obter mais informações sobre exemplos de código, consulte Scripts de exemplo do Depurador 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);
Confira também
Objetos nativos do depurador em extensões JavaScript
Objetos nativos do depurador em extensões JavaScript – Considerações sobre design e teste