URDB

Ana-Maria Visan, Kapil Arya, Gene Cooperman, Tyler Denniston
2011 Proceedings of the 6th Workshop on Programming Languages and Operating Systems - PLOS '11  
Reversible debuggers have existed since the early 1970s. A novel approach, URDB, is introduced based on checkpoint/reexecute. It adds reversibility to a debugger, while still placing the end user within the familiar environment of their preferred debugger. The URDB software layer currently includes modes that understand the syntax for four debuggers: GDB for C/C++/Java/Fortran, Python (pdb), MATLAB, and Perl (perl -d). It does so by adding a thin URDB software layer on top of the DMTCP
more » ... t-restart package. URDB passes native debugging commands between the end user and the underlying debugging session. URDB models the four common debugging primitives that form the basis for most debuggers: step, next, continue, break. For example, given a debugging history of the form [step, next, step], URDB's reverse-step produces a new history, [step, next]. Further, subtle algorithms are described for reversexxx. For example, reverse-step operates correctly when the last instruction of the history is next or continue. URDB calls DMTCP to create a checkpoint during a debugging session, and then replays the history from there. An essential novelty of this work is the extension of DMTCP to be the first checkpointing package capable of checkpointing a GDB sesssion to disk (through checkpointing the Linux ptrace system call). This was a significant barrier to earlier attempts toward checkpoint/re-execute for GDB. Support for the GDB debugger is important to any reversible debugger claiming universality. Experimental results are described for GDB, MATLAB, Python (pdb), and Perl.
doi:10.1145/2039239.2039251 dblp:conf/sosp/VisanACD11 fatcat:wxg66hw2yzerxcehtxnmvf6vpq