Compartilhar via


Inspeção de objeto na API de criação de perfil

Este tópico discute como usar os métodos de criação de perfil para inspecionar os objetos.

FunctionEnter2 e retornos de chamada de FunctionLeave2

O FunctionEnter2 e FunctionLeave2 retornos de chamada fornecem informações sobre os argumentos e retornar o valor de uma função, como regiões de memória. Os argumentos são armazenados da esquerda para a direita nas regiões de memória de determinado. Um gerador de perfil pode usar a assinatura de metadados da função para interpretar os argumentos, como mostrado na tabela a seguir.

ELEMENT_TYPE

Representação

Primitives (ELEMENT_TYPE <= R8, I, U)

Valores primitivos.

Tipos de valor (VALUETYPE)

Depende do tipo.

Reference types (CLASS, STRING, OBJECT, ARRAY, GENERICINST, SZARRAY)

ObjectID(ponteiro em uma pilha de coleta de lixo).

BYREF

Ponteiro gerenciado (não um ObjectID, mas pode estar apontando para uma pilha de coleta de lixo ou pilha).

PTR

Ponteiro não gerenciado (não Movível pela coleta de lixo).

FNPTR

Tamanho do ponteiro valor opaco.

TYPEDBYREF

Gerenciado ponteiro, seguido por um valor de opaco de tamanho do ponteiro.

As diferenças entre um ObjectID e um ponteiro gerenciado são as seguintes:

  • ObjectIDponto de s somente no heap de coleta de lixo ou heap de objeto congeladas. Ponteiros gerenciados também podem apontar para a pilha.

  • ObjectIDs sempre apontar para o início de um objeto. Ponteiros gerenciados podem apontar para um dos campos do objeto.

  • Ponteiros gerenciados não podem ser passados para funções que esperam um ObjectID.

Consulte o CorElementType enumeração para obter uma lista dos tipos CLR disponíveis.

Inspecionando tipos complexos

Inspecionar tipos de referência ou tipos de valor não primitivo envolve algumas técnicas avançadas.

Para tipos de valor e tipos de referência diferente, por exemplo, seqüências de caracteres ou matrizes, o ICorProfilerInfo2::GetClassLayout método fornece o deslocamento para cada campo. O profiler pode usar metadados para determinar o tipo do campo e recursivamente avaliá-lo.

Observação

GetClassLayoutRetorna somente os campos que são definidos pela classe em si; campos que são definidos pela classe pai não são incluídos.Você pode usar o ICorProfilerInfo2::GetClassIDInfo2 método para localizar o ClassID da classe pai e em seguida, use GetClassLayout para obter informações sobre os campos definidos pela classe do pai.

Para tipos de valor convertidos, o ICorProfilerInfo2::GetBoxClassLayout método fornece o deslocamento do tipo de valor dentro da caixa. Não altera o layout do tipo de valor. Portanto, assim que o profiler encontrou o tipo de valor dentro da caixa, ele pode usar GetClassLayout para entender o layout.

Para seqüências de caracteres, o ICorProfilerInfo2::GetStringLayout método fornece os deslocamentos de partes interessantes de dados no objeto de seqüência de caracteres.

Arrays são um pouco especiais, você deve chamar um método para cada objeto de matriz em vez de cada tipo de matriz. (Isso é porque há muitos formatos de matriz para descrever por meio de deslocamentos). O ICorProfilerInfo2::GetArrayObjectInfo método é fornecido para fazer a interpretação.

Inspecionando campos estáticos

Há quatro tipos de campos estáticos. A tabela a seguir descreve o que são e como identificá-los.

Tipo estático

Definição

Como ele aparece nos metadados

AppDomain

O campo estático básico. Ele tem um valor diferente em cada domínio de aplicativo.

Campo estático que não tenha conectado os atributos personalizados.

Thread

Armazenamento local de segmento gerenciado (TLS). Este é um campo estático com um valor exclusivo para cada segmento e cada domínio de aplicativo.

Campo estático marcado com ThreadStaticAttribute.

RVA

Escopo do processo o campo estático uma casa na seção de dados do módulo.

Campo estático com hasRVA sinalizador.

Contexto

Campo estático com um valor diferente em cada contexto COM+.

Campo estático marcado com ContextStaticAttribute.

O ICorProfilerInfo2::GetThreadStaticAddress, ICorProfilerInfo2::GetAppDomainStaticAddress, ICorProfilerInfo2::GetContextStaticAddress, e ICorProfilerInfo2::GetRVAStaticAddress métodos fornecem informações sobre a localização dos campos estáticos. Você olhando para a memória nesse local, interpretá-lo da seguinte maneira:

  • Tipos de referência: ObjectID.

  • Tipos de valor: ObjectIDda caixa que contém o valor real.

  • Tipos primitivos: Valor primitivo.

Referência

Função de FunctionEnter2

Função de FunctionLeave2

Método de ICorProfilerInfo2::GetClassLayout

Método de ICorProfilerInfo2::GetBoxClassLayout

Método de ICorProfilerInfo2::GetStringLayout

Método de ICorProfilerInfo2::GetArrayObjectInfo

Método de ICorProfilerInfo2::GetThreadStaticAddress

Método de ICorProfilerInfo2::GetAppDomainStaticAddress

Método de ICorProfilerInfo2::GetContextStaticAddress

Método de ICorProfilerInfo2::GetRVAStaticAddress

Consulte também

Conceitos

Visão geral de criação de perfil