次の方法で共有


ICorDebugSymbolProvider2::GetGenericDictionaryInfo メソッド

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

構文

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

パラメーター

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

解説

注意

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

このマップは最上位レベルの 2 つのセクションで構成されています。

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

  • バイトで整列されているヒープ: オブジェクトのインスタンス化に関する情報が含まれています。 最後のディレクトリ エントリの直後から開始します。

ディレクトリ

ディレクトリ内の各エントリは、ヒープ内のオフセットを参照します。つまり、これは、ヒープの開始位置を基準としたオフセットです。 個々のエントリの値が一意とは限りません。このため、複数のディクショナリ エントリがヒープ内の同一オフセットを指すことがあります。

汎用のディクショナリ マップのディレクトリ部分の構造は次のとおりです。

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

  • N 個のディレクトリ エントリがその後に続きます。 各エントリは 8 バイトであり、次の 2 つの 4 バイト セグメントからなります。

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

    • バイト 4 ~ 7: オフセット (ヒープの開始位置を基準としたオフセット)。

ヒープ

ヒープのサイズは、ストリーム リーダーにより、ディレクトリ サイズ + 4 の値からストリームの長さを差し引くことで算出されます。 つまり、以下の要件が適用されます。

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

ディレクトリのサイズが N * 8 であるとします。

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

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

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

  • T 個の型。各型は ECMA 型署名形式で表されます。

各ヒープ要素の長さを含めることで、ヒープに影響を与えずに、ディレクトリ セクションの単純な並べ替えを実行できるようになります。

必要条件

:システム要件」を参照してください。

ヘッダー: CorDebug.idl、CorDebug.h

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 4.6 以降で使用可能、.NET ネイティブのみ

関連項目