This might not be the best approach, but it generally works for me. I highly suggest reading the following books: Debugging, Debug It! and parts of Code Complete.
Personally I use whichever debugger I have on hand with breakpoints and walk through code to see what's going on, that usually lets me find my bugs fairly quickly. Of course the first step is reproduction of the bug, which can sometimes be hard.
It also depends on the language that it's written in. For example, gdb is good for debugging C or C++ or assembler, but you probably wouldn't use it to debug a Lisp program (unless you were a masochist).