In the current state of debugging, developers often use backwards reasoning to work from the symptom of a bug they observed to find possible causes [4]. They utilize breakpoints, for instance, to suspend the execution of an application at locations of possible causes in the code. When the execution is suspended, they can analyze the state of the application at that point. Eclipse JDT offers the Inspect feature where developers can select expressions in the code and have them evaluated in the state at which execution is currently suspended. However, for some bugs, such as stealth bugs [2]—which destroy their own evidence—the usual approach of reasoning backwards does not suffice to debug them. An example for such bugs is depicted in Listing 1.
[1]
Stefan Schulz.
Back-In-Time Evaluation: Towards Online Trace-Based Debugging
,
2017,
Programming.
[2]
Marc Eisenstadt,et al.
My hairiest bug war stories
,
1997,
CACM.
[3]
Bil Lewis,et al.
Debugging Backwards in Time
,
2003,
ArXiv.
[4]
Robert Hirschfeld,et al.
Studying the advancement in debugging practice of professional software developers
,
2015,
Software Quality Journal.
[5]
Joshua Bloch.
Effective Java (2nd Edition) (The Java Series)
,
2008
.
[6]
Éric Tanter,et al.
Back to the Future: Omniscient Debugging
,
2009,
IEEE Software.