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