Mike,
In the software world, a "debugger" is a tool that helps you find bugs in your code. It does not find them for you*, unfortunately!

Typically it allows you to step through the code line by line, look at the contents of variables, change memory on the fly, etc. Instead of the program running at full speed, you can see what each line does to variables and which "if" statements are evaluated to TRUE and which are FALSE, etc. In jobs like mine where we write very low level embedded software (device drivers, etc) a good debugger is a necessity.
Unfortunately, I'm not aware of a debugger that can be used with the IFI system, which is really a shame. In order to debug, teams are forced to use printf()s inside their code instead, which many seasoned programmers consider a fairly primitive way of debugging (though some swear by it). However, Rob Bayer has created a Robot Controller Simulator which can serve a very similar purpose as a debugger and will likely be useful for testing code for a lot of teams this year.
* Side note: there are a few tools out there which can find some types of bugs for you automatically. One that comes to mind that I used in college is called Purify, and it can tell you if your program ever uses uninitialized memory, fails to free memory, walks off the end of an array, etc. Very useful, of course, but it doesn't come anywhere close to finding all the types of bugs that can creep into a project.