Reverse Debugging with GDB
Beginning with the 7.0 release in September 2009, gdb now includes support for a whole new way of debugging called "reverse debugging" -- meaning that gdb can allow you to "step" or "continue" your program backward in "time", reverting it to an earlier execution state.
Reverse debugging is only supported for a limited (but growing) number of gdb targets, including:
- Certain remote targets including the Simics and SID simulators, and "Undo-db"
The Process Record and Replay target for native linux.
Anyone who has used a debugger has probably had the experience of suddenly realizing that you have accidentally gone too far -- the event you were looking for has passed, and you missed seeing it. With reverse debugging, instead of starting the program over from the beginning and repeating your entire (possibly lengthy) debugging session, you can simply set a breakpoint at an earlier point in the program, and "reverse-continue", causing the program to back up and "undo itself" to that earlier point, from which you can proceed forward again. Or, you can "reverse-step" and "reverse-next" to back up one program statement at a time (just like normal "step" and "next" take you forward by one program statement).