In the case of compile-time errors in the results of macro expansion, CMUCL's error reportage gives some very useful information: the actual source expression that expands to erroneous code, some context to say which part of the expansion is in error, and an easy way to see how particular expressions get expanded (macroexpand-1) so that your eyeball can spot the error.
For errors occuring during macro-expansion, you get full source-level debugging, since the macro is a Lisp program.
Now I'm curious about how well it works for debugging runtime errors in macro-expanded code. I mustn't have done much of that.
Another more upbeat observation is how good programs like strace and ethereal are, and the fact that you can understand a lot about a program by looking at how it interacts with other programs. Is this what they call "stratified design"?