次の方法で共有


ICorProfilerInfo::SetILInstrumentedCodeMap メソッド

指定した Microsoft Intermediate Language (MSIL) マップ エントリを使用して、指定した関数のコード マップを設定します。

メモメモ

.NET Framework Version 2.0 では、特定のアプリケーション ドメインのジェネリック関数を表す FunctionID を指定して SetILInstrumentedCodeMap を呼び出すと、アプリケーション ドメインのその関数のすべてのインスタンスに反映されます。

HRESULT SetILInstrumentedCodeMap(
    [in]  FunctionID functionId,
    [in]  BOOL       fStartJit,
    [in]  ULONG      cILMapEntries,
    [in, size_is(cILMapEntries)] COR_IL_MAP rgILMapEntries[]);

パラメーター

  • functionId
    [入力] コード マップを設定する関数の ID。

  • fStartJit
    [入力] 特定の FunctionID に対して実行する初めての SetILInstrumentedCodeMap メソッドの呼び出しかどうかを示すブール値。 指定した FunctionID に対して SetILInstrumentedCodeMap を初めて呼び出す場合は fStartJit を true に設定します。それ以降に呼び出す場合は、false に設定します。

  • cILMapEntries
    [入力] cILMapEntries 配列の要素数。

  • rgILMapEntries
    [入力] それぞれが MSIL オフセットを指定する、COR_IL_MAP 構造体の配列。

解説

プロファイラーは、メソッドをインストルメントするために、そのメソッドのソース コード内にステートメントを挿入することがあります (たとえば、指定したソース行に到達したことを通知するため)。 SetILInstrumentedCodeMap を使用すると、元の MSIL 命令をプロファイラーで新しい場所にマップできます。 プロファイラーは、ICorProfilerInfo::GetILToNativeMapping メソッドを使用して、指定したネイティブ オフセットの元の MSIL オフセットを取得できます。

デバッガーは、それぞれの古いオフセットが、元の変更されていない MSIL コード内にある MSIL オフセットを参照し、新しいオフセットは、新しいインストルメント化されたコード内にある MSIL オフセットを参照するものとして動作します。 マップは、昇順に格納する必要があります。 ステップ実行が正しく機能するように、以下のガイドラインに従ってください。

  • インストルメント化した MSIL コードを並べ替えないでください。

  • 元の MSIL コードを削除しないでください。

  • プログラム データベース (PDB: Program DataBase) ファイルのすべてのシーケンス ポイントのエントリをマップに含めてください。 マップは、見つからないエントリの補間は行いません。 このため、次のようにマップを指定します。

    (0 旧, 0 新)

    (5 旧, 10 新)

    (9 旧, 20 新)

    • 0、1、2、3、または 4 の古いオフセットは、新しいオフセット 0 にマップされます。

    • 5、6、7、または 8 の古いオフセットは、新しいオフセット 10 にマップされます。

    • 9 の古いオフセットまたはそれ以降は、新しいオフセット 20 にマップされます。

    • 0、1、2、3、4、5、6、7、8、または 9 の新しいオフセットは、古いオフセット 0 に割り当てられます。

    • 10、11、12、13、14、15、16、17、18、または 19 の新しいオフセットは、古いオフセット 5 に割り当てられます。

    • 20 の新しいオフセットまたはそれ以降は、古いオフセット 9 にマップされます。

必要条件

プラットフォーム: 「.NET Framework システム要件」を参照

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

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1

参照

参照

ICorProfilerInfo インターフェイス