ICorDebugSymbolProvider2::GetGenericDictionaryInfo 方法

检索泛型字典映射。

语法

HRESULT GetGenericDictionaryInfo(
   [out] ICorDebugMemoryBuffer** ppMemoryBuffer
);

参数

ppMemoryBuffer
[out] 一个指针,指向包含泛型字典映射的 ICorDebugMemoryBuffer 对象的地址。 有关详细信息,请参阅备注部分。

备注

注意

此方法仅适用于 .NET Native。

该映射由两个顶级部分组成:

  • 一个目录,包含此映射中包括的所有字典的相对虚拟地址 (RVA)。

  • 一个字节对齐的,包含对象实例化信息。 在最后一个目录输入后立即开始。

目录

目录中的每个条目引用堆内的偏移量;也就是说,它是相对于堆开始的偏移量。 单独条目的值不一定是唯一的;在堆中多个目录条目有可能指向相同的偏移量。

泛型字典映射的目录部分具有以下结构:

  • 前 4 个字节包含字典条目的数量(也就是说,字典中的相对虚拟地址数)。 我们将此值称为“N”。如果设置了高位元,则按相对虚拟地址以升序对条目排序。

  • N 目录条目也遵循此规则。 每个条目由 8 个字节(两个 4 字节段)构成:

    • 字节 0-3:RVA;字典的相对虚拟地址。

    • 字节 4-7:偏移量;相对于堆开始的偏移量。

可用流读取器计算堆的大小,计算方法是目录大小 + 4 再减去流的长度。 换句话说:

Heap Size = Stream.Length – (Directory Size + 4)

其中,目录大小为 N * 8

在堆上每个实例化信息项的格式为:

  • 此实例化信息项的长度(采用压缩 ECMA 元数据格式,以字节为单位)。 该值不包括此长度信息。

  • 采用压缩 ECMA 元数据格式的泛型实例化类型或 T 的数目。

  • T 类型,每个均以 ECMA 类型签名格式表示。

包含每个堆元素的长度使目录部分实现简单排序,而不对堆造成影响。

要求

平台:请参阅系统要求

标头:CorDebug.idl、CorDebug.h

库:CorGuids.lib

.NET Framework 版本:4.6 及更高版本,仅限 .NET Native

请参阅