实施行级分析
Posted
技术标签:
【中文标题】实施行级分析【英文标题】:Implementing line-level profiling 【发布时间】:2013-07-16 10:23:03 【问题描述】:上周左右我一直在使用 CLR Profiling API,作为夏季的宠物项目。
我开始思考 ANTS 和 DotTrace 如何实现行级分析。我在 Profiling API 中看不到任何与此相关的内容,所以我认为他们有一些专有的东西。
我正在寻找有关他们如何实现这一点的指针或想法。
当代码被 JIT'ed 时,他们会注入 MSIL 代码吗?
【问题讨论】:
如果你这样做的原因是想办法加速代码(位置精度比时间精度更重要),我依赖的方法是this。 我实际上已经看到了这个答案,这是有道理的。我这样做不是因为我想加快一些特定的代码,只是因为我很好奇:) 有两种方法,检测和堆栈采样。检测涉及将调用插入代码中,因此具有侵入性且成本高昂。堆栈采样(如Zoom)是非侵入性的,并提供线路级成本。我不确定是否有任何.net。如果没有,应该有。 【参考方案1】:开箱即用的 CLR 分析 API 支持仅在进入和离开级别进行跟踪。这可以使用ICorProfilerInfo::SetEnterLeaveFunctionHooks来完成
为了进行更精细的跟踪,需要对 IL 进行编织。您可以使用这些开源分析器代码作为参考:
OpenCover PartCoverJITCompilationStarted 回调期间的两个编织代码。
【讨论】:
感谢您的回复。是的,我的输入、离开和尾调用回调工作得很好。将仔细查看您提到的项目,仅简要查看了其中一个的代码。以上是关于实施行级分析的主要内容,如果未能解决你的问题,请参考以下文章