ICorProfilerInfo2::GetFunctionInfo2 方法

获取函数的父类、元数据标记以及每个类型参数的 ClassID(如果存在)。

HRESULT GetFunctionInfo2(
    [in]  FunctionID funcId,
    [in]  COR_PRF_FRAME_INFO frameInfo,
    [out] ClassID *pClassId,
    [out] ModuleID *pModuleId,
    [out] mdToken *pToken,
    [in]  ULONG32 cTypeArgs,
    [out] ULONG32 *pcTypeArgs,
    [out] ClassID typeArgs[]);

参数

  • funcId
    [in] 要获取其父类和其他信息的函数的 ID。

  • frameInfo
    [in] 一个 COR_PRF_FRAME_INFO 值,该值指向有关堆栈帧的信息。

  • pClassId
    [out] 一个指向函数的父类的指针。

  • pModuleId
    [out] 一个指向在其中定义函数父类的模块的指针。

  • pToken
    [out] 一个指向函数的元数据标记的指针。

  • cTypeArgs
    [in] typeArgs 数组的大小。

  • pcTypeArgs
    [out] 一个指向 ClassID 值的总数的指针。

  • typeArgs
    [out] 一个由 ClassID 值构成的数组,其中的每个值都是函数的类型参数的 ID。 方法返回时,typeArgs 将包含部分或全部 ClassID 值。

备注

探查器代码可以调用 ICorProfilerInfo::GetModuleMetaData 来获取给定模块的元数据接口。 然后,返回到 pToken 所引用位置的元数据标记便可用于访问该函数的元数据。

通过 pClassId 和 typeArgs 参数返回的类 ID 和类型参数取决于传入 frameInfo 参数的值,如下表中所示。

frameInfo 参数的值

结果

FunctionEnter2 回调中获得的 COR_PRF_FRAME_INFO 值

在 pClassId 所引用位置中返回的 ClassID 以及在 typeArgs 数组中返回的所有类型参数都将是准确的。

FunctionEnter2 回调以外的源中获得的 COR_PRF_FRAME_INFO

无法确定准确的 ClassID 和类型参数。 也就是说,ClassID 可能为 Null,并且某些类型参数可能作为 Object 返回。

无法确定准确的 ClassID 和类型参数。 也就是说,ClassID 可能为 Null,并且某些类型参数可能作为 Object 返回。

GetFunctionInfo2 返回后,您必须验证 typeArgs 缓冲区是否足够大以包含所有 ClassID 值。 为此,请将 pcTypeArgs 指向的值与 cTypeArgs 参数的值进行比较。 如果 pcTypeArgs 指向大于 cTypeArgs 除以 ClassID 值大小的值,请分配更大的 pcTypeArgs 缓冲区,用新的、更大的大小更新 cTypeArgs,然后再次调用 GetFunctionInfo2

或者,您可以首先用长度为零的 pcTypeArgs 缓冲区调用 GetFunctionInfo2,以获取正确的缓冲区大小。 然后,您可以将缓冲区大小设置为 pcTypeArgs 中返回的值除以 ClassID 值的大小,并再次调用 GetFunctionInfo2

有关这两种方法的更多信息,请参见分析 API 方法约定

要求

**平台:**请参见 .NET Framework 系统要求

**头文件:**CorProf.idl、CorProf.h

**库:**CorGuids.lib

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

请参见

参考

ICorProfilerInfo 接口

ICorProfilerInfo2 接口

其他资源

分析接口

分析(非托管 API 参考)