It's not just learning how to use the debugger that's important (assuming the platform you're working on has one!) but also designing for debugging.
On some embedded projects that I worked on many, many years ago, the software was compiled on a 286 MSDOS machine and blown into a ROM before it could be tested. Very early on I designed in a diagnostics port into all of the hardware so that I could plug in my debug box (LED display, switches, RS232 port) to get debugging information out.
Nowadays I work on Windows based projects, but I still design in debugging. Now it comes in the form of compile time & run time asserts, logs and exceptions. All are built into the code from the very beginning.