I love the hardware debuggers - in theory anyway. In practice, my micro project usually is full of interrupt routines for clocks, and to get real time interaction with its environment. In many of my projects, the micro is spending over half its processing time in interrupts.
Basically interrupts and hardware debugging just do not work together well at all. At best, you set up a break point, and once the break point is triggered, you can look at some registers, but you then have to restart the micro anyway as the interrupt handling will be screwed. Just about everything a hardware debugger can do, I can do using debug statements in code, writing debug info to a LCD screen if there is one, and using the serial port for dumping bytes. With my own debug statements, the only resources the micro needs to assign to debugging are the resources I choose to give to debugging.
If I am stuck, then I will probably have to go to an emulator to be able to single step the code, but setting up an emulator can be hard work, particularly when you have to set up files to simulate the real time inputs on pins and an emulators does not show a display on the LCD screen, set the voltage on an external DAC, etc.
I would think a hardware debugger is great when you are learning to program and you are not sure how parts of the micro are actually working, but you get past that stage quickly. Then I just find it is just not much use.
If your task happens to do a mass of complex processing without needing interrupts, then yes - hardware debugging would be great. That is just not the kind of project I find myself doing.
Richard.