使用 Clang 检测进行基于时间的分析

Time-based profiling using Clang instrumentation

本文关键字:时间 于时间 检测 Clang 使用      更新时间:2023-10-16

Clang 的-fprofile-instr-generate选项可以记录每行代码(甚至代码行的一部分(执行的次数。有一些开销,但非常小。

有没有办法让Clang做类似的事情,但记录一行代码的总执行时间而不是运行次数。

我知道有基于样本的分析器(perf 等(,但这些似乎很糟糕 - 例如,据我所知,它们对调用堆栈进行采样,因此您不会获得行级信息。

我可以接受大量的开销(例如 100%(,只要它不会过多地扭曲相对时间(+/-30% 就可以(。

似乎确实有这样的东西 - 它被称为XRay,由Google开发。

据我所知,它没有达到逐行分析的程度,甚至没有达到基本的块级别。粒度仅限于函数 - 但您可以精确控制检测哪些函数(默认情况下具有 100 条以上指令的函数(,甚至可以在运行时打开和关闭检测。

它似乎处于相当早期的开发阶段,仅适用于 Linux。尽管如此,看起来还是有用的。

编辑:gperftools实际上对此非常有效(我想我之前忽略了它们,因为pprof以前在Mac上根本不工作,但我修复了它(。我强烈建议您使用pprof-http选项 - 它为您提供了一个很酷的交互式界面,其中包含源代码,调用图,火焰图等。