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 及更高版本

另请参阅