获取从公共中间语言 (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 起可用