MoonBox: debugging with online slicing and dryrun

Efficient tools are indispensable in the battle against software bugs. In this short paper, we introduce two techniques that target different phases of an interactive and iterative debugging session. To make slice-assisted log analysis practical to help fault diagnosis, slicing itself must be done instantaneously. We split the costly slicing computation into online and offline, and employ incremental updates after program edits. The result is a vast reduction of slicing cost. For the benchmarks we tested, slices can be computed in the range of seconds, which is 0.02%~6.5% of the unmodified slicing algorithm. The possibility of running slicing in situ and with instant response time gives rise to the possibility of editing-time validation, which we call dryrun. The idea is that a pair of slices, one forward from root cause and one backward from the bug site, defines the scope to validate a fix. This localization makes it possible to invoke symbolic execution and constraint solving that are otherwise too expensive to use in an interactive debugging environment.

[1]  Manu Sridharan,et al.  Snugglebug: a powerful approach to weakest preconditions , 2009, PLDI '09.

[2]  Ding Yuan,et al.  How do fixes become bugs? , 2011, ESEC/FSE '11.

[3]  Ricardo Bianchini,et al.  Striking a new balance between program instrumentation and debugging time , 2011, EuroSys '11.

[4]  Xiangyu Zhang,et al.  Dynamic slicing long running programs through execution fast forwarding , 2006, SIGSOFT '06/FSE-14.

[5]  Mary Lou Soffa,et al.  An Incremental Version of Iterative Data Flow Analysis , 1989, IEEE Trans. Software Eng..

[6]  George Candea,et al.  Execution synthesis: a technique for automated software debugging , 2010, EuroSys '10.

[7]  Ding Yuan,et al.  SherLog: error diagnosis by connecting clues from run-time logs , 2010, ASPLOS XV.

[8]  Zhendong Su,et al.  Has the bug really been fixed? , 2010, 2010 ACM/IEEE 32nd International Conference on Software Engineering.

[9]  Monica S. Lam,et al.  Cloning-based context-sensitive pointer alias analysis using binary decision diagrams , 2004, PLDI '04.

[10]  Ding Yuan,et al.  Characterizing logging practices in open-source software , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[11]  Joseph Robert Horgan,et al.  Dynamic program slicing , 1990, PLDI '90.

[12]  Xiangyu Zhang,et al.  Selecting peers for execution comparison , 2011, ISSTA '11.

[13]  Edsger W. Dijkstra,et al.  A Discipline of Programming , 1976 .

[14]  James C. King,et al.  Symbolic execution and program testing , 1976, CACM.

[15]  Rajiv Gupta,et al.  A practical framework for demand-driven interprocedural data flow analysis , 1997, TOPL.

[16]  David W. Binkley,et al.  Interprocedural slicing using dependence graphs , 1988, SIGP.

[17]  Yuanyuan Zhou,et al.  Efficient online validation with delta execution , 2009, ASPLOS.

[18]  Cheng Zhang,et al.  AutoLog: facing log redundancy and insufficiency , 2011, APSys.

[19]  Ding Yuan,et al.  Improving Software Diagnosability via Log Enhancement , 2012, TOCS.

[20]  David W. Binkley,et al.  Program slicing , 2008, 2008 Frontiers of Software Maintenance.

[21]  Joe D. Warren,et al.  The program dependence graph and its use in optimization , 1984, TOPL.