ICorProfilerInfo::SetILInstrumentedCodeMap メソッド
指定した共通中間言語 (CIL) マップ エントリを使用して、指定した関数のコード マップを設定します。
Note
.NET Framework バージョン 2.0 では、特定のアプリケーション ドメインでジェネリック関数を表す FunctionID
で SetILInstrumentedCodeMap
を呼び出すと、アプリケーション ドメイン内のその関数のすべてのインスタンスに影響します。
構文
HRESULT SetILInstrumentedCodeMap(
[in] FunctionID functionId,
[in] BOOL fStartJit,
[in] ULONG cILMapEntries,
[in, size_is(cILMapEntries)] COR_IL_MAP rgILMapEntries[]);
パラメーター
functionId
[in] コード マップを設定する関数の ID。
fStartJit
[in] SetILInstrumentedCodeMap
メソッドの呼び出しが、特定の FunctionID
の最初のものであるかどうかを示すブール値。 指定された FunctionID
についての SetILInstrumentedCodeMap
の最初の呼び出しの場合は fStartJit
を true
に設定し、それ以降の場合は false
に設定します。
cILMapEntries
[in] cILMapEntries
配列内の要素の数。
rgILMapEntries
[in]COR_IL_MAP構造体の配列。それぞれが CIL オフセットを指定します。
解説
プロファイラーは多くの場合、メソッドをインストルメント化する (たとえば、特定のソース行に到達したときに通知する) ために、メソッドのソース コード内にステートメントを挿入します。 SetILInstrumentedCodeMap
を使用すると、プロファイラーは元の CIL 命令を新しい場所にマップできます。 プロファイラーでは、ICorProfilerInfo::GetILToNativeMapping メソッドを使用して、特定のネイティブ オフセットの元の CIL オフセットを取得できます。
デバッガーは、各古いオフセットが元の変更されていない CIL コード内の CIL オフセットを参照し、新しい各オフセットが新しいインストルメント化されたコード内の CIL オフセットを参照することを前提としています。 マップは昇順に並べ替える必要があります。 ステップを正常に行うには、次のガイドラインに従ってください。
インストルメント化された CIL コードを並べ替えないでください。
元の CIL コードを削除しないでください。
プログラム データベース (PDB) ファイルのすべてのシーケンス ポイントのエントリをマップに含めます。 マップでは、不足しているエントリは補間されません。 次のマップがあるとします。
(古いものが 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 3.5 およびそれ以前のバージョンでは、CoTaskMemAlloc メソッドを呼び出すことによって rgILMapEntries
配列を割り当てます。 ランタイムでこのメモリの所有権が取得されるため、プロファイラーではこれを解放しないでください。
必要条件
:「システム要件」を参照してください。
ヘッダー : CorProf.idl、CorProf.h
ライブラリ: CorGuids.lib
.NET Framework のバージョン: 1.1 以降で使用可能
関連項目
.NET