user623879
user623879

Reputation: 4142

C# Do Debug statements get compiled out when running in Release mode?

It seems like it would be ideal (in terms of readability) to use say Debug.WriteLine to write to output rather than a ton of #if DEBUG statements.

When the program is compiled in release mode, does all the overhead with the Debug.WriteLine go away as if it did not exist, or is the function still called, but nothing done internally?

If so, is there any way to obtain this functionality on a custom class, i.e., a static call would only be compiled in if we are in Debug mode?

Upvotes: 11

Views: 2037

Answers (1)

Ivan Danilov
Ivan Danilov

Reputation: 14777

It is called ConditionalAttribute and it is already there: Debug.WriteLine() calls are removed entirely when you compile in Release mode.

It is declared like this:

[ConditionalAttribute("DEBUG")]
public static void WriteLine(string message)

So any calls to it are removed if the DEBUG symbol is not declared, e.g., in the default configuration of a release build. (You can change what pre-processor symbols are defined for different build configurations in the project properties.)

The same is true for (almost?) every method in Debug. In fact, it is the main difference between Debug and Trace - Trace's methods stay in release also.

Upvotes: 19

Related Questions