Debuggers are for Losers
java.dzone.com
java.dzone.com
Like any tool it can be abused or used instead of trying to grok how shit works. There's an easy way to fix it: Don't do that. There. Done.
I pull out the debugger every now and then, just like I pull out an IDE when writing Java code, or the web inspector when running my javascript. Running stuff aids my understanding of said stuff.
Let's not try and run a one-legged marathon just for the sake it, shall we?
You've got a unit test that just failed. It's not immediately obvious what's going on, but it's possible some assumption about possible states your program can be in at this point turns out to be incorrect. In order to diagnose it in more detail, would you rather. . .
a) Start guessing at possible causes, and cycle through iterations of writing print statements to check for them and then running the program to see their output until you make a correct guess.
b) Start guessing at possible causes, and cycle through iterations of writing Assert() statements to check for them and running the program to see if anything throws until you make a correct guess.
c) Set a breakpoint, fire up the program, and take a peek at the program state at the point where the test fails in order to get an immediate and complete picture of what's going on in there.
d) Spend two hours stepping through the code one line at a time, and a further four on Google Image Search hunting for pictures you can use to pepper the blog post blaming the debugger you could stand to learn to use more effectively for your productivity problems.
Yeah, bugs came from my "inability to understand the code under all program flows", or whatever, but it would have been considerably more difficult to understand the code without looking at it in use.