Kernighan and Pike on debugging

While reading the log4j manual, I came across this excellent quote from Brian W. Kernighan and Rob Pike’s “The Practice of Programming”:

As personal choice, we tend not to use debuggers beyond getting a stack trace
or the value of a variable or two. One reason is that it is easy to get lost
in details of complicated data structures and control flow; we find stepping
through a program less productive than thinking harder and adding output
statements and self-checking code at critical places. Clicking over
statements takes longer than scanning the output of judiciously-placed
displays. It takes less time to decide where to put print statements than to
single-step to the critical section of code, even assuming we know where that
is. More important, debugging statements stay with the program; debugging
sessions are transient.

What is needed is a debugger that puts printf’s everywhere. A debugger where you can step backwards and check out the programs state after it executed. Such debuggers exist… check em out:
TimeMachine: C/C++ http://www.ghs.com/products/timemachine.html
Amber: C/C++ (Still in development)
OmniCore: Java – http://www.Omnicore.com
There are plenty of others too!