主要观点:
- 对
rr
调试器进行修改,使其可在无需访问 CPU 硬件性能计数器的环境中运行,即“软件计数器模式”rr
,能在更多受限环境如云虚拟机和容器中使用。 - 介绍程序记录和回放的概念及作用,通过记录和回放可重现程序运行状态,方便调试和理解程序。
rr
是一个开源的记录和回放调试器,具有广泛的可用性、良好性能等优点,但存在需访问 CPU 硬件性能计数器的限制。- 作者对记录和回放系统及
rr
有多年的喜爱和研究,曾将rr
移植到 Rust 并写过相关博客,后因各种原因停止该项目,现在致力于“软件计数器模式”rr
的开发。
关键信息:
- “软件计数器模式”
rr
通过轻量级动态(和静态) instrumentation 实现在无 CPU 硬件性能计数器环境下运行rr
记录和回放。 - 程序运行时存在诸多非确定性因素导致每次运行不同,记录和回放可解决此问题,记录时保存非确定性方面到日志,回放时插入这些方面。
rr
是唯一具有多种优点的开源记录和回放系统,但在云虚拟机和容器等环境中受限,因为这些环境通常禁用 CPU 硬件性能计数器。- 作者曾将
rr
移植到 Rust 并写博客,后停止该项目,现在专注于“软件计数器模式”rr
的开发。
重要细节:
- 以 YouTube 视频为例说明记录和回放的确定性,视频上传后不变,可多次观看。
- 程序运行时的非确定性因素包括用户输入时间、图形界面元素位置、网络调用结果、时间和随机数、文件修改、多线程线程交错等。
rr
的相关资源包括 arXiv 论文[Engineering Record And Replay For Deployability: Extended Technical Report],以及[https://github.com/rr-debugge...]和[https://github.com/sidkshatri...]等仓库。- 构建和运行“软件计数器模式”
rr
可访问[https://github.com/sidkshatri...]。 - 作者目前不接受该博客的 Pull Requests,如有重要事项可提 issue。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。