I've always used debuggers as a faster form of print statements. It faster to inspect several values using the debugger than it is to write and then delete a bunch of print statements.
However print statements become my go-to tool when debugging multithreaded code.