To explain this further, I think printf is more focused and direct than running around in the debugger. You need to have a clearer idea of what you're looking for in advance and know how to exclude parts of the program as possible culprits, which I think helps with debugging in general.
And, come to think of it, with hot code reloading, printf can be just as immediate, but more direct and focused, than
using the debugger. Shame that few languages/environments offer hot code reloading...