ICorProfilerInfo4::GetILToNativeMapping2 方法

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

Syntax

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。

注释

ICorProfilerFunctionControl::SetILInstrumentedCodeMap 方法未在 .NET Framework 4.5 中实现,因此已重新编译的函数不能具有与最初编译的函数不同的 IL 到本机映射。 因此, GetILToNativeMapping2 不能在 .NET Framework 4.5 中使用非零 JIT 重新编译 ID 调用。

该方法 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 起可用

另请参阅