Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c#

debugging

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?

like image 619
user623879 Avatar asked Jul 31 '11 16:07

user623879


People also ask

What C is used for?

C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...

What is the full name of C?

In the real sense it has no meaning or full form. It was developed by Dennis Ritchie and Ken Thompson at AT&T bell Lab. First, they used to call it as B language then later they made some improvement into it and renamed it as C and its superscript as C++ which was invented by Dr.

What is C in C language?

What is C? C is a general-purpose programming language created by Dennis Ritchie at the Bell Laboratories in 1972. It is a very popular language, despite being old. C is strongly associated with UNIX, as it was developed to write the UNIX operating system.

Is C language easy?

C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.


1 Answers

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.

like image 79
Ivan Danilov Avatar answered Nov 11 '22 15:11

Ivan Danilov