ICorDebugSymbolProvider2::GetGenericDictionaryInfo 方法

检索泛型字典映射。

Syntax

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 类型签名格式表示。

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

要求

平台: 请参阅 .NET 支持的作系统

页眉: CorDebug.idl、CorDebug.h

图书馆: CorGuids.lib

.NET 版本: 自 .NET Framework 4.6 起可用

另请参阅