This research was conducted by Peter Ohmann and Ben Liblit. The paper appeared in the 28th IEEE/ACM International Conference on Automated Software Engineering (ASE 2013). An extended version of this paper has been accepted for publication in the ASE journal.
Debugging is difficult and costly. As a human programmer looks for a bug, it would be helpful to see a complete trace of events leading to the point of failure. Unfortunately, full tracing is simply too slow to use in deployment, and may even be impractical during testing.
We aid post-deployment debugging by giving programmers additional information about program activity shortly before failure. We use latent information in post-failure memory dumps, augmented by low-overhead, tunable run-time tracing. Our results with a realistically-tuned tracing scheme show low enough overhead (0–5%) to be used in production runs. We demonstrate several potential uses of this enhanced information, including a novel postmortem static slice restriction technique and a reduced view of potentially-executed code. Experimental evaluation shows our approach to be very effective, such as shrinking interprocedural slices by 49–78% in larger applications.
The full paper is available as a single PDF document. A suggested BibTeX citation record is also available.
Code implementing ideas from this paper is available as open source for others to use and/or build upon. Feedback, bug reports, and enhancements are welcome!