ICorProfilerInfo::SetILInstrumentedCodeMap 方法

更新:2007 年 11 月

使用指定的 Microsoft 中间语言 (MSIL) 映射项为指定的函数设置代码映射。

说明:

在 .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 结构构成的数组,其中每个结构均指定 MSIL 偏移量。

备注

探查器通常在方法的源代码中插入语句以便检测该方法(例如,为了在到达给定的源行时发出通知)。SetILInstrumentedCodeMap 允许探查器将原始的 MSIL 指令映射到其新位置。探查器可以使用 ICorProfilerInfo::GetILToNativeMapping 方法获取给定本机偏移量的原始 MSIL 偏移量。

调试器将假定每个旧偏移量是指原始的、未修改的 MSIL 代码中的 MSIL 偏移量,每个新偏移量是指新的已检测代码中的 MSIL 偏移量。映射应按升序排序。为了使单步执行正常进行,请遵循下列准则:

  • 不要对已检测的 MSIL 代码重新排序。

  • 不要移除原始的 MSIL 代码。

  • 在映射中包括与程序数据库 (PDB) 文件中的所有顺序点对应的项。映射不插入缺少的项。因此,如果给定以下映射:

    (0 old, 0 new)

    (5 old, 10 new)

    (9 old, 20 new)

    • 旧偏移量 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

**库:**CorGuids.lib

**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1

请参见

参考

ICorProfilerInfo