ICorDebugSymbolProvider2::GetGenericDictionaryInfo 方法
检索泛型字典映射。
语法
HRESULT GetGenericDictionaryInfo(
[out] ICorDebugMemoryBuffer** ppMemoryBuffer
);
参数
ppMemoryBuffer
[out] 一个指针,指向包含泛型字典映射的 ICorDebugMemoryBuffer 对象的地址。 有关详细信息,请参阅备注部分。
备注
注意
此方法仅适用于 .NET Native。
该映射由两个顶级部分组成:
目录
目录中的每个条目引用堆内的偏移量;也就是说,它是相对于堆开始的偏移量。 单独条目的值不一定是唯一的;在堆中多个目录条目有可能指向相同的偏移量。
泛型字典映射的目录部分具有以下结构:
前 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