@Zedy: you didn't state wheter you are using or not a real target (micro) and which tool (MPLAB ICD2, PicKit,...) you are using for that.
In the case of using MPLAB ICD2 (but with PicKit II it should be possible too) you can easily set breakpoints, run code, and watch variables (on the target, not simulated). This gives a great insight into your program.
One trouble with this approach is that you can't use it in some applications, since it is needed to halt the target to update values. This is not possible, for example, in a power supply controller (something may eventually blow up).
A workaround that I'm considering to implement (it is not an original idea) is using a serial port to monitor variables: an application on the PC sends to the target the variable address (taken from the watch window) and the target gives back the value.