I would say it is more like driving a car without your headlights.
In broad daylight...
I don't use them except for fun (I like how they can read through memory and disassemble programs). Occasionally I use gdb to see what my pointers are doing and to find out what signals I'm being sent (usually SIGSEGV ;] )...
Yes I have, that's what a SIGSEGV is (it's notification that your program has caused a segfault), but I can usually figure out what piece of code is causing it without looking at a backtrace.
In the case where I can't figure out what's causing it I do use gdb; but not often.
You can definitely write new code without a debugger. A debugger for new code is a crutch for those that have not switched to TDD. I find TDD much more generally useful.
I do frequently need to use a debugger for OPC (other people's code).
I will fall back to using a debugger on my code one in a while. But I consider it a failure on my part when I do.
I relent. I just had a segfault and GDB helped my find it. It was something to do with the pointer-to-member operator and strcpy and I got a segfault; used a debugger and then solved it. So you were right, they are useful.