主要观点:函数调用和返回事件的时间线是调试性能问题的好方法,尤其在生产环境中,但其采用在行业中仍不均衡存在鸡生蛋问题。介绍了新的 C++函数跟踪分析器[funtrace],它具有低开销、支持多线程等优点,还介绍了相关工具如[viztracer]、[LLVM XRay]、[magic-trace]等,并讨论了它们的特点和用途,以及硬件辅助跟踪的可能性和未来工作方向。
关键信息:
- [funtrace]:用于 C++的函数跟踪分析器,开销低(每个插入的调用或返回<10ns),支持线程、共享库和异常等,可与 stock gcc 或 clang 配合使用,易于集成到构建系统中,运行时约 1K LOC 且易扩展和审计。
- [viztracer]:用于 Python 的跟踪分析器,使用时需注意触发跟踪的 API 及可能出现的问题,如“Error: RPC framing error”可通过重新打开 trace.json 解决,其输出的跟踪结果比数字表更直观。
- [LLVM XRay]:为大型公司设计的开源函数跟踪 C++分析器,通过在函数入口/退出插入 NOP 指令序列降低开销,自动剔除跟踪开销,压缩跟踪事件,但在一些小环境中存在局限性,如实时应用、嵌入式环境等,且开源版本在解码共享库符号方面存在问题。
- [magic-trace]:基于 Intel Performance Trace 的非侵入式跟踪分析器,无需重新编译即可工作,开销低,但存在难以移植到许多流行平台的问题。
- 硬件辅助跟踪:大多数 CPU 有硬件跟踪设施,但基本用于调试硬件或低级软件,Intel Performance Trace 可零开销跟踪本机代码,magic-trace 基于此,作者建议 CPU 硬件添加简单的跟踪指令如 TRACE,以降低开销并便于解释器和 JITters 使用。
重要细节:
- [funtrace]的实现细节,包括编译器 instrumentation、运行时代码、解码跟踪查看器、离线跟踪解码器、ftrace 跟踪线程状态变化、从核心转储获取跟踪、funcount 剔除开销等方面的工作原理和代码实现。
- [viztracer]使用时的常见问题及解决方法,如 Ctrl-C 中断程序获取跟踪、“Error: RPC framing error”错误等。
- [LLVM XRay]的工作机制,如自动剔除开销的阈值、压缩跟踪事件的方式等。
- 硬件辅助跟踪的两种细化方式,“完美主义 CPU 制造商”和“实用芯片制造商”的不同做法。
总结:本文全面介绍了函数跟踪相关的工具和技术,包括它们的优点、局限性和未来发展方向,为调试性能问题提供了多种选择和思路。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。