I used to think symbolic debuggers were tricky until I actually bothered to pick up GDB. It seems hard and complicated at first, but it's really not. You can get very far with just "break", "next", and "print". It's so much nicer than printf debugging (and I used to be a hardcore printf debuggerer).