主要观点:调试器和分析器有时明显有问题,有时微妙难以发现。默认的 libc 不生成帧指针会导致 CPU 火焰图部分错误等问题,Fedora 和 Ubuntu 即将发布默认包含帧指针的版本,这对火焰图和持续分析器等都有很大帮助。还介绍了帧指针的相关知识、其被移除的历史、多年来导致的问题及解决过程等。
关键信息:
- 系统默认 libc 不生成帧指针会使部分堆栈信息缺失,影响火焰图等。
- Fedora 和 Ubuntu 即将发布默认含帧指针的版本,Arch Linux 也在跟进。
- 帧指针对性能有一定影响,不同语言和应用情况不同,通常小于 1%,但极端情况可能达 10%。
- 多年来帧指针相关问题一直存在,各方在推动其默认开启。
重要细节: - x86 - 64 ABI 规定 %rbp 可作“基指针”,但此寄存器使用可选。
- 2004 年 gcc 开始停止生成帧指针,2005 - 2023 年该变化应用到 x86 - 64 导致更多问题。
- 2014 年作者在 Netflix 发现 Java 缺少帧指针支持,后开发修复并推广使用带帧指针的 libc。
- 进行过多种性能开销测试,如 Python 等基准测试的情况。
- 上游化帧指针存在困难,Fedora 相关讨论很复杂。
- 除帧指针外还有多种栈遍历方式,如 LBR、BTS 等。
- 未来可能会有更多关于栈遍历的发展,如 SFrames、Shadow Stacks 等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。