ICorProfilerInfo4::GetILToNativeMapping2 方法

获取从公共中间语言 (CIL) 偏移量到指定函数的 JIT 重新编译版本中包含的代码的本机偏移量的映射。

语法

HRESULT GetILToNativeMapping2(
    [in] FunctionID functionId,
    [in] ReJITID reJitId,
    [in] ULONG32 cMap,
    [out] ULONG32 *pcMap,
    [out, size_is(cMap), length_is(*pcMap)]
        COR_DEBUG_IL_TO_NATIVE_MAP map[]);

参数

functionId [in]包含代码的函数的 ID。

pReJitId [in] JIT 重新编译的函数的标识。 该标识在 .NET Framework 4.5 中必须为零。

cMap [in] map 数组的最大大小。

pcMap [out] COR_DEBUG_IL_TO_NATIVE_MAP 结构的可用总数。

map [out]结构数组 COR_DEBUG_IL_TO_NATIVE_MAP ,每个结构都指定偏移量。 GetILToNativeMapping2 方法返回后,map 将包含部分或全部 COR_DEBUG_IL_TO_NATIVE_MAP 结构。

注解

GetILToNativeMapping2 类似于 ICorProfilerInfo::GetILToNativeMapping 方法,只不过它将允许探查器在未来版本中指定重新编译的函数的 ID。

注意

在 .NET Framework 4.5 中未实现 ICorProfilerFunctionControl::SetILInstrumentedCodeMap 方法,因此经过 JIT 重新编译的函数所拥有的 IL 到本机的映射必须与初始编译的函数相同。 同样,不能在 .NET Framework 4.5 中使用经过 JIT 重新编译的非零 ID 调用 GetILToNativeMapping2

GetILToNativeMapping2 方法返回 COR_DEBUG_IL_TO_NATIVE_MAP 结构的数组。 为了表达一定范围的本机指令对应于特殊的代码区域(例如,prolog),数组中的条目可以将其 ilOffset 字段设置为 CorDebugIlToNativeMappingTypes 枚举的值。

返回 GetILToNativeMapping2 后,必须验证 map 缓冲区大小是否足以包含所有 COR_DEBUG_IL_TO_NATIVE_MAP 结构。 为此,请将 cMap 的值和 pcMap 参数的值进行比较。 如果 pcMap 值乘以 COR_DEBUG_IL_TO_NATIVE_MAP 结构的大小所得的值大于 cMap,请分配更大的 map 缓冲区、将 cMap 更新为新的更大大小,并再次调用 GetILToNativeMapping2

或者,可以先用长度为零的 map 缓冲区调用 GetILToNativeMapping2 以获取正确的缓冲区大小。 然后,可将缓冲区大小设置为 pcMap 中返回的值,并再次调用 GetILToNativeMapping2

要求

平台:请参阅系统要求

头文件: CorProf.idl、CorProf.h

库:CorGuids.lib

.NET Framework 版本:自 4.5 起可用

另请参阅