On our Convex the debugger works with all levels of optimization,
including vectorization. Granted, there is not necessarily a
one to one correspondence between source level statements and
instructions, but it can usually keep track of variables
and approximate corresponding location in the source.

I would think that reverse compilers would be neat under UNIX given
that if one had the symbol table one could at least use the same
names as the original program. I don't know of any though. It really
isn't necessary frequently enough to justify writing ones(my opinion).