#defining out a function in c#?

M

Matthew Caesar

I've written some code in the C# programming language. I have a lot of
calls to a function that prints out some debugging information. I
would like to occasionally remove all calls to these functions when I
want the program to run quickly (when I'm measuring how fast it runs)
but I want the calls to be in when I'm debugging.
More detail: I have a class called MyDebug with a member called Trace.
I periodically call MyDebug.Trace("string with debugging info...").

Solutions that aren't sufficient:
- I don't want to have to comment out all calls to this function every
time I want to do performance analysis, because there are LOTS of
calls and this would take a long time.
- I can't simply modify the function to return null instead of
printing, because the arguments to the function take a lot of overhead
to compute. For example, I may call MyDebug.Trace("val1
"+val1.ToString()+"val2"+val2.ToString()), which has to concatenate
several strings together, which causes a lot of overhead. I don't want
the argument to be evaluated in the first place.

I suspect there must be a solution for this, since C++ has a nice way
to solve this:
(from http://www-subatech.in2p3.fr/~photons/subatech/soft/carnac/CPP-DEB-2.shtml)
#define assert(THETEST) ((void)0)
makes it so all calls to assert go away.

My question then is, how can I remove all calls to a function in C#,
without commenting the calls out (takes too long) and so that the
arguments aren't evaluated?

Thanks a lot for your help.
 
A

Andre

What you need is this: annotate your debugging method with the following:

[Conditional("DEBUG")]

Then compile your code with:

csc program.cs /d:DEBUG

If you leave out "/d:DEBUG", the function calls to that particular
method will be ignored. This is a much cleaner than using #defines and #ifs

-Andre
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top