次の方法で共有


ICorDebugSymbolProvider2::GetGenericDictionaryInfo メソッド

汎用ディクショナリ マップを取得します。

構文

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

パラメーター

ppMemoryBuffer
[out]ジェネリック ディクショナリ マップを含む ICorDebugMemoryBuffer オブジェクトのアドレスへのポインター。 詳細については、「解説」セクションを参照してください。

注釈

このメソッドは、.NET ネイティブでのみ使用できます。

マップは、次の 2 つの最上位セクションで構成されます。

  • このマップに含まれるすべてのディクショナリの相対仮想アドレス (RVA) を含む ディレクトリ

  • オブジェクトのインスタンス化情報を含むバイトアライン ヒープ 。 最後のディレクトリ エントリの直後に開始されます。

ディレクトリ

ディレクトリ内の各エントリは、ヒープ内のオフセットを参照します。つまり、ヒープの開始を基準としたオフセットです。 個々のエントリの値は必ずしも一意であるとは限りません。複数のディレクトリ エントリがヒープ内の同じオフセットを指している可能性があります。

汎用ディクショナリ マップのディレクトリ部分には、次の構造があります。

  • 最初の 4 バイトには、ディクショナリ エントリの数 (つまり、ディクショナリ内の相対仮想アドレスの数) が含まれています。 この値は N と見なします。上位ビットが設定されている場合、エントリは相対仮想アドレスで昇順に並べ替えられます。

  • N 個のディレクトリ エントリが続きます。 各エントリは、2 つの 4 バイト セグメントで 8 バイトで構成されます。

    • バイト 0 から 3: RVA;ディクショナリの相対仮想アドレス。

    • バイト 4 から 7: オフセット。ヒープの先頭からの相対オフセット。

ヒープ

ヒープのサイズは、ストリーム リーダーによって、ディレクトリ サイズ + 4 からストリームの長さを減算することによって計算できます。 要するにあの:

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

ディレクトリ サイズが N * 8

ヒープ上の各インスタンス化情報項目の形式は次のとおりです。

  • 圧縮 ECMA メタデータ形式のこのインスタンス化情報項目の長さ (バイト単位)。 この値は、この長さの情報を除外します。

  • 圧縮 ECMA メタデータ形式のジェネリック インスタンス化型 ( T) の数。

  • T 型。それぞれ ECMA 型シグネチャ形式で表されます。

各ヒープ要素の長さを含めることで、ヒープに影響を与えずにディレクトリ セクションを簡単に並べ替えられます。

Requirements

プラットフォーム:サポートされている .NET オペレーティング システムを参照してください。

ヘッダ: CorDebug.idl、CorDebug.h

図書館: CorGuids.lib

.NET のバージョン: .NET Framework 4.6 以降で使用可能

こちらも参照ください