This is interesting, but how does one go about debugging an application which is dotfuscated? I am used to internal apps where we can look at a call stack, list of 30 recent functions and runtime comments for our apps.

What is needed to provide a level of error information when the function names and strings are unreadable?

When you debug, it uses the original IL, not the obfuscated one, so internal debugging will remain the same.