Bah, sprinkling printf statements is a quality debugging technique. Sometimes everything really is a nail.
I always took that to mean dogma was no substitute for results, so I use whichever works better for the problem at hand. (Or at least try to - often this means trying to notice when one way isn't working well and being willing to switch, but that means I was doing the worse choice for a while)
To use gdb, I have to recompile all code with -g, run gdb, set up breakpoints and variable printing, run the program in gdb and then slowly step through it.
Alternatively, I can just write this somewhere:
fprintf(stderr, "i = %d\n", i);To say printf is not a "quality debugging technique" is just false.
My personal favorite is programs that seem non-deterministic. Different errors/results for different executions.