Skip to main content
QUICK REVIEW

[论文解读] Temporal Debugging using URDB

Ana Maria Visan, Artem Y. Polyakov|ArXiv.org|Oct 27, 2009
Parallel Computing and Optimization Techniques参考文献 10被引用 8
一句话总结

本文提出URDB,一种通用可逆调试器,通过利用DMTCP的快速检查点-重启机制实现时间调试,使多线程、多进程及分布式程序在无需修改源代码的情况下实现可逆执行。它支持gdb、MATLAB、Python和Perl,并通过进程级检查点技术实现时间搜索和表达式观察点等新功能,克服了传统基于日志的可逆调试器的局限性。

ABSTRACT

A new style of temporal debugging is proposed. The new URDB debugger can employ such techniques as temporal search for finding an underlying fault that is causing a bug. This improves on the standard iterative debugging style, which iteratively re-executes a program under debugger control in the search for the underlying fault. URDB acts as a meta-debugger, with current support for four widely used debuggers: gdb, MATLAB, python, and perl. Support for a new debugger can be added in a few hours. Among its points of novelty are: (i) the first reversible debuggers for MATLAB, python, and perl; (ii) support for today's multi-core architectures; (iii) reversible debugging of multi-process and distributed computations; and (iv) temporal search on changes in program expressions. URDB gains its reversibility and temporal abilities through the fast checkpoint-restart capability of DMTCP (Distributed MultiThreaded CheckPointing). The recently enhanced DMTCP also adds ptrace support, enabling one to freeze, migrate, and replicate debugging sessions.

研究动机与目标

  • 解决现代多核、多进程和分布式程序中复杂且时间分散的调试难题。
  • 克服传统迭代式和基于日志的可逆调试器在大规模或并发计算中效率低下或不可行的局限性。
  • 通过将进程视为一等对象,实现对进程生命周期的元编程和时间搜索。
  • 提供轻量级、可扩展的框架,在不修改目标调试器源代码的前提下为其添加可逆性。
  • 通过与gdb、MATLAB、Python和Perl的集成,以及在交互式游戏上的概念验证实现,证明其实际适用性。

提出的方法

  • URDB作为现有调试器的元调试器包装器,利用DMTCP的快速检查点-重启机制,在不进行日志记录的情况下创建程序状态的时间快照。
  • 通过从磁盘检查点恢复实现可逆执行,支持程序执行过程中的前后遍历。
  • 系统使用250行Python模板在数小时内实现新型调试器个性(如MATLAB、Python、Perl),且无需修改目标调试器的代码。
  • 通过在进程生命周期上进行二分查找实现表达式观察点,支持对程序表达式中值变化的时间搜索。
  • 通过检查整个进程组及其进程间通信状态,支持多线程、多进程和分布式计算。
  • 通过允许程序重播、修改和分析自身执行历史,实现推测执行和程序内省。

实验结果

研究问题

  • RQ1能否构建一个通用可逆调试器,支持多种调试器而无需访问其源代码?
  • RQ2基于检查点的可逆调试能否扩展到长时运行、多核和分布式程序,而传统基于日志的方法会失效?
  • RQ3能否有效实现时间搜索和表达式观察点,以支持对时间上相距较远故障的调试?
  • RQ4能否将进程生命周期视为一等对象,以支持元编程,如推测执行和依赖分析?
  • RQ5能否通过增量检查点和基于命令的临时检查点,将检查点的性能和存储开销最小化?

主要发现

  • URDB成功实现了对四种广泛使用的调试器——gdb、MATLAB、Python(pdb)和Perl(perl -d)——的可逆调试,且无需修改其源代码。
  • 该系统支持在多核、多线程和分布式程序上的可逆执行,这是大多数先前可逆调试器所不具备的能力。
  • 表达式观察点通过识别用户指定表达式值发生变化的时间点,支持时间搜索,从而在执行历史中高效验证假设。
  • 在未访问源代码的情况下实现了可逆MATLAB、Python和Perl调试器的实现,证明了该框架的通用性。
  • 在经典UNIX游戏(rogue和robots)上的概念验证应用表明,推测执行和时间旅行调试在交互式仿真中是可行的。
  • 该方法避免了基于日志系统的确定性重放限制,同时支持并发和分布式执行,为传统可逆调试器提供了一种可扩展的替代方案。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。