An In Circuit Debugger is analogous to finding a fault on a car engine by opening the bonnet, starting the engine, hooking up some diagnostic equipment and then monitoring what's happening and allowing you to make adjustments while it's running.
Altering the source code and repeatedly reprogramming the PIC to find a fault is like fault finding an engine with the bonnet closed.
The ICD lets you see the code executing 'live' inside the PIC. As Bill says you can stop it, inspect the contents of file registers to see if they contain what you expected, and even stop the code mid-execution, alter registers and restart execution.
Sure you can walk through your code manually and keep altering the source code and eventually you'll find your bugs, but in some situations it can be far easier to let the PIC do the 'walking',