CLR Profiling and Rewriting using ICLRProfiling::AttachProfi

本文关键字:ICLRProfiling AttachProfi using Rewriting Profiling and CLR | 更新日期: 2023-09-27 17:55:21

我收集了使用 CLR 探查器

ICLRProfiling::AttachProfiler 方法的主要好处是,您现在可以在目标进程启动很久之后附加 CLR 探查器,并且您也不必在启动时将COR_ENABLE_PROFILINGCOR_PROFILER环境变量传递给进程?这两个假设都是正确的吗?

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

  • GetILFunctionBody

  • GetILFunctionBodyAllocator

  • SetILFunctionBody

  • SetILInstrumentedCodeMap

  • SetEnterLeaveFunctionHooks*

  • SetFunctionIDMapper*

  • GetNotifiedExceptionClauseInfo

  • 与进入/离开/尾调用相关的所有方法

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

CLR Profiling and Rewriting using ICLRProfiling::AttachProfi

可悲的是,答案是"否",在 CLR 附加探查器模式下无法执行 IL 重写;它仍然仅在进程启动模式下受支持。

在我的 CLR 探查器实现中调用 ICorProfilerInfo::GetILFunctionBody() 方法将返回CORPROF_E_UNSUPPORTED_FOR_ATTACHING_PROFILER

GetILFunctionBody() 失败,错误0x8013136f

ICorProfilerInfo::GetILFunctionBody()来源在这里,供那些有兴趣深入研究为什么会发生这种情况的人使用。