ICorProfilerInfo::SetILInstrumentedCodeMap 方法
使用指定的公共中间语言 (CIL) 映射项设置指定函数的代码映射。
注意
在 .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 及更高版本