Método ICorDebugSymbolProvider2::GetGenericDictionaryInfo
Recupera um mapa de dicionário genérico.
Sintaxe
HRESULT GetGenericDictionaryInfo(
[out] ICorDebugMemoryBuffer** ppMemoryBuffer
);
Parâmetros
ppMemoryBuffer
[out] Um ponteiro para o endereço de um objeto ICorDebugMemoryBuffer que contém o mapa de dicionário genérico. Consulte a seção Comentários para obter mais informações.
Comentários
Observação
Esse método só está disponível no .NET Native.
O mapa consiste em duas seções de nível superior:
Um diretório que contém os endereços virtuais relativos (RVA) de todos os dicionários incluídos nesse mapa.
Um heap alinhado a bytes que contém informações de instanciação de objeto. Ele começa imediatamente após a última entrada do diretório.
O diretório
Cada entrada no diretório refere-se a um deslocamento dentro do heap, ou seja, é um deslocamento relativo ao início do heap. O valor das entradas individuais não é necessariamente exclusivo. É possível que várias entradas de diretório apontem para o mesmo deslocamento no heap.
A parte de diretório do mapa de dicionário genérico tem a seguinte estrutura:
Os quatro primeiros bytes contêm o número de entradas de dicionário (ou seja, o número de endereços virtuais relativos no dicionário). Vamos nos referir a esse valor como N. Se o bit mais significativo for definido, as entradas serão classificadas por endereço virtual relativo em ordem crescente.
Veja a seguir as entradas de diretório N. Cada entrada consiste em oito bytes, em dois segmentos de quatro bytes:
Bytes 0-3: RVA; o endereço virtual relativo do dicionário.
Bytes 4-7: deslocamento; um deslocamento relativo ao início do heap.
O heap
O tamanho do heap pode ser calculado por um leitor de fluxo subtraindo o comprimento do fluxo do tamanho do diretório + 4. Em outras palavras:
Heap Size = Stream.Length – (Directory Size + 4)
em que o tamanho do diretório é N * 8
.
O formato para cada item de informação de instanciação no heap é:
O comprimento desse item de informação de instanciação em bytes no formato de metadados ECMA compactado. O valor exclui essas informações de comprimento.
O número de tipos de instanciação genéricos, ou T, no formato de metadados ECMA compactado.
Tipos T, cada um representado no formato de assinatura do tipo ECMA.
A inclusão do comprimento de cada elemento heap permite a classificação simples da seção do diretório sem afetar o heap.
Requisitos
Plataformas: confira Requisitos do sistema.
Cabeçalho: CorDebug.idl, CorDebug.h
Biblioteca: CorGuids.lib
Versões do .NET Framework: disponíveis desde 4.6, somente .NET Native