By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
460,028 Members | 1,258 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 460,028 IT Pros & Developers. It's quick & easy.

#defining out a function in c#?

P: n/a
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/~photon...PP-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.
Nov 15 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
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

John Wood wrote:
Do you need:

#if DEBUG
....
#endif

?

"Matthew Caesar" <ma*********@yahoo.com> wrote in message
news:1b*************************@posting.google.co m...
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/~photon...PP-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.



Nov 15 '05 #2

P: n/a
Nice solution. Thanks a lot!

Andre <fo********@hotmail.com> wrote in message news:<3f********@clarion.carno.net.au>...
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

Nov 15 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.