Appearance
ARD调试K3工作
1. StarryOS 启动性能优化
问题:原Starryos启动调试时间消耗太大。
最初使用的 StarryOS 实验环境启动耗时较长,从 Welcome 到进入 Shell 平均需要约 264 秒,完整启动时间约300秒
为解决这一问题,更换为经过改造的新starryOS分支建立独立工作区,重新编译包含 DWARF 调试信息的 ELF,并适配 K3 原有固件和 UFS 启动流程。github链接:https://github.com/Oveln/tgoskits/tree/feat/k3-board-support
经过六轮测试,新版本从 Welcome 到 Shell 的中位耗时缩短至 21.50 秒,相比原派生实验镜像减少约 242.84 秒(91.87%),该阶段启动速度提升约 12.29 倍。正式工作区重新编译后的镜像也完成了真板启动验证,耗时约 21.51 秒。
2. ARD 真板调试验证
在新的 StarryOS 环境下,成功完成 OpenOCD、GDB 和 ARD Debug Adapter 连接,Rust 源码断点能够正常命中。
同时验证了 ARD 的 RuntimeEvent、History、Observer Tree 和 Snapshot 功能,成功观察到 sleep_until → TimerFuture::poll 异步运行关系。
改进后显著减少了进入 Shell 前的等待时间与 ARD 调试时间。将 ARD 原有的测试示例改为新测试用例,同时完成了测试配置、工作区校验器和相关文档更新,支持通过环境变量指定外部 StarryOS 工作区。
《Back to the Future: Omniscient Debugging》-全知调试
1. 问题
Bug产生的原因通常在程序出现异常之前 原来程序调试方法有两种:
日志调试
通过提前插入日志记录程序运行过程。
它可以保留程序历史执行信息。
但是需要提前修改代码。并且日志输出信息太多,后续人工分析困难。
断点调试
如 GDB,通过暂停程序详细观察当前状态。
但是它只能看到当前执行位置,对于之前发生了什么通常无法恢复。开发人员需要不断重新运行程序,通过调整断点逐渐缩小范围。
怎样让开发者能够高效的回到过去,找到导致当前错误的事件?
2. 提出方法
论文提出 Omniscient Debugging(全知调试),核心思想是:
记录程序完整执行历史,并允许开发者像查看录像一样,在执行历史中前后导航。
它结合了两种调试方式的特点:
- 日志调试:保存过去发生的事情;
- 断点调试:交互查看程序状态。
因此可以支持:
- 向前执行;
- 向后回溯;
- 根据因果关系寻找错误来源。
3. 系统实现:TOD
作者实现了一个 Java 全知调试器:Trace-Oriented Debugger(TOD)。
核心目标:查询和导航历史事件 
4. 论文解决的关键问题
全知调试主要面临三个挑战,作者对此进行了解决。

《Lightweight User-Space Record And Replay》-调试的记录与重播
1. 问题
在程序调试过程中,有些 Bug 很难稳定复现,比如多线程竞争、异步信号或偶发错误。传统 GDB 调试通常需要反复运行程序,但每次执行过程可能不一样,因此很难准确找到错误原因。
分析
方案1:通过整个虚拟机记录,但是记录信息太多,过于笨重
方案2:修改内核,会导致部署困难,普通用户不能直接使用。
方案3:代码插桩,需要修改/监控大量代码,导致性能下降
2. 提出方法
作者认为,CPU 执行的大部分普通计算是确定性的,但是以下事情可能不同:
- 系统调用返回的数据;
- 多线程执行顺序;
- 信号在什么位置到达;
- 某些非确定性 CPU 指令的结果。
因此rr 选择用户空间与 Linux 内核之间的接口作为主要记录边界,通过控制不确定的变量,追求准确的记录并回放程序。 
为了应对几个关键问题,系统主要采用三个技术机制。

ARD调试器与async-debug调试器架构区分
真正的区别主要在信息如何采集、保存、验证以及最终展示
- 旧版研究如何观察并恢复异步执行路径的问题;
- 新版进一步研究如何持续的保留运行历史和建立关系,从而对历史与当前状态展示的问题。
主要架构如下: 
由于异步函数在执行过程中调用栈不连续。并且存在一个函数多次poll不同函数的情况
- 快照累计版本能够观察到某些函数的执行,但是完整调用链依赖停止点 Snapshot 累计,未能将其保留在调用树中;
- 新版通过后端运行事件积累,可以在没有中途 Snapshot 的情况下保留相应执行信息 下一步实验方向:验证旧版快照累计是否遗漏已观测的异步执行信息,以及新版后端 History 能否有效保留这些历史。