0

我收集到使用 CLR Profiler ICLRProfiling::AttachProfiler方法的主要好处是,您现在可以在目标进程启动后很长时间附加您的 CLR 分析器,并且您也不必在启动时将环境变量COR_ENABLE_PROFILINGCOR_PROFILER环境变量传递给进程? 这两个假设都是正确的吗?

另外,我在2011 年的 CLR Profiling 团队博客文章读到 ICLRProfiling::AttachProfiler不支持以下内容,但将来会:

  • GetILFunctionBody

  • GetILFunctionBodyAllocator

  • SetILFunctionBody

  • SetILInstrumentedCodeMap

  • SetEnterLeaveFunctionHooks*

  • SetFunctionIDMapper*

  • GetNotifiedExceptionClauseInfo

  • 与 Enter/Leave/Tailcall 相关的所有方法

现在支持这些吗?我在问,因为我还没有在网上找到更多关于这个主题的内容,而且 2011-2012 年的许多 Microsoft 链接现在都已失效。如果不是,那么在使用ICLRProfiling::AttachProfiler附加我的 CLR Profiler 时,甚至可以重写函数体吗?

4

1 回答 1

1

遗憾的是,答案是“不”,在 CLR 附加分析器模式下,您不能进行 IL 重写;它仍然仅在进程启动模式下受支持。

ICorProfilerInfo::GetILFunctionBody()在我的 CLR Profiler 实现中对方法的调用返回CORPROF_E_UNSUPPORTED_FOR_ATTACHING_PROFILER

GetILFunctionBody() 失败,错误为 0x8013136f

对于那些有兴趣深入了解为什么会发生这种情况的人来说,ICorProfilerInfo::GetILFunctionBody() 源代码就在这里。

于 2016-07-07T16:35:47.420 回答