Visual C# .NET includes a number of enhancements that make debugging and diagnostics much simpler. Conditional compilation in Visual C# programs is achieved through use of the Conditional attribute. Default Visual C# projects define the DEBUG and TRACE symbols for debug builds and define only the TRACE symbol for release builds.
The call stack can be manipulated using the StackTrace and StackFrame classes. These classes can be used to determine the methods that conspired to call a specific location in your code. Other classes in the .NET Framework provide support for sophisticated output of trace and debug messages.