使用 Clang 检测进行基于时间的分析
Time-based profiling using Clang instrumentation
Clang 的-fprofile-instr-generate
选项可以记录每行代码(甚至代码行的一部分(执行的次数。有一些开销,但非常小。
有没有办法让Clang做类似的事情,但记录一行代码的总执行时间而不是运行次数。
我知道有基于样本的分析器(perf 等(,但这些似乎很糟糕 - 例如,据我所知,它们对调用堆栈进行采样,因此您不会获得行级信息。
我可以接受大量的开销(例如 100%(,只要它不会过多地扭曲相对时间(+/-30% 就可以(。
似乎确实有这样的东西 - 它被称为XRay,由Google开发。
据我所知,它没有达到逐行分析的程度,甚至没有达到基本的块级别。粒度仅限于函数 - 但您可以精确控制检测哪些函数(默认情况下具有 100 条以上指令的函数(,甚至可以在运行时打开和关闭检测。
它似乎处于相当早期的开发阶段,仅适用于 Linux。尽管如此,看起来还是有用的。
编辑:gperftools实际上对此非常有效(我想我之前忽略了它们,因为pprof
以前在Mac上根本不工作,但我修复了它(。我强烈建议您使用pprof
的-http
选项 - 它为您提供了一个很酷的交互式界面,其中包含源代码,调用图,火焰图等。
相关文章:
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 时间持续时间到时间字符串
- 使用时间,时间应该如何存储为变量?
- 将带有参考时间的时间戳转换为格式化时间
- 即使在多任务处理时,添加用户时间 + 系统时间(来自 shell 的时间命令)是否是一种可靠的措施?
- 为什么这个经过的时间(帧时间)计算会锁定我的游戏
- 长度库,其实现方式类似于C++时间的计时
- 使用不同的整数组装字符数组以类似于日期和时间
- C++:读取.BMP文件时出现问题;文件结束时间早于预期
- 如何使课程持续时间存储时间长度
- 如何格式化标准::时间持续时间
- 不取决于系统时间的时间
- C程序的示例长时间执行时间
- 当(执行时间)>>>(编译时间)时,多个编译单元是否仍然值得?
- C++使用可变模板编译特定于时间的函数
- 在时间::持续时间类型之间转换,其中两个分母的LCM都很大
- 获取评测函数持续时间的时间(以毫秒为单位)
- 将迭代器返回到多映射中最接近指定时间的时间
- Boost:如何处理依赖于时间的线程操作
- 如何将毫秒添加到自epoch以来的时间持续时间