This is an idea for a debugger in the same vein as graphical frontends to GDB. However, it would look like Macromedia Flash in terms of interface. Let me explain.

Near the top of the window, you can see the timeline. The program player would also have this widget. The timeline is broken into frames. You can designate any frame to be a keyframe. All other frames are simply additional intervals of time over which the objects on the scene continue acting normally (moving, animating, fading, etc). In the program player, a frame would simply be an execution of the next instruction, or line of code if it had some GDB-style intelligence.
Now, the beauty comes when you decide to make a keyframe. At a keyframe, you can change the values of variables at that point in time, inspect them, print them, etc. You can also define a bunch of operations (print $i, reset it to zero, execute next 10 lines of code and do it again). You can also branch based on a condition: let's say I'm noticing some differences in program operation and it seems to depend on whether this conditional succeeds or not. Okay, so then I can actually branch my program's execution. Program player will duplicate the entire program's memory segment, and continue both of them at opposite sides of the condition. Then you can run them side by side, and see the differences.
You can also flip back and forth through time as if you were editing a Flash movie. You use the < and > keys to do this.