description | title | ms.date | helpviewer_keywords | ms.assetid | |||
---|---|---|---|---|---|---|---|
Learn more about: Debug Class (C++/CLI) | Debug Class (C++/CLI) | 11/04/2016 |
| 076bd528-1b6f-4e8a-a372-eb5849cf969a |
When using xref:System.Diagnostics.Debug in a Visual C++ application, the behavior does not change between a debug and a release build.
The behavior for xref:System.Diagnostics.Trace is identical to the behavior for the Debug class, but is dependent on the symbol TRACE being defined. This means that you must #ifdef
any Trace-related code to prevent debug behavior in a release build.
The following sample always executes the output statements, regardless of whether you compile with /DDEBUG or /DTRACE.
// mcpp_debug_class.cpp// compile with: /clr #using <system.dll> usingnamespaceSystem::Diagnostics;usingnamespaceSystem;intmain() { Trace::Listeners->Add( gcnew TextWriterTraceListener( Console::Out ) ); Trace::AutoFlush = true; Trace::Indent(); Trace::WriteLine( "Entering Main" ); Console::WriteLine( "Hello World." ); Trace::WriteLine( "Exiting Main" ); Trace::Unindent(); Debug::WriteLine("test"); }
Entering Main Hello World. Exiting Main test
To get the expected behavior (that is, no "test" output printed for a release build), you must use the #ifdef
and #endif
directives. The previous code sample is modified below to demonstrate this fix:
// mcpp_debug_class2.cpp// compile with: /clr #using <system.dll> usingnamespaceSystem::Diagnostics;usingnamespaceSystem;intmain() { Trace::Listeners->Add( gcnew TextWriterTraceListener( Console::Out ) ); Trace::AutoFlush = true; Trace::Indent(); #ifdef TRACE // checks for a debug buildTrace::WriteLine( "Entering Main" ); Console::WriteLine( "Hello World." ); Trace::WriteLine( "Exiting Main" ); #endifTrace::Unindent(); #ifdef DEBUG // checks for a debug buildDebug::WriteLine("test"); #endif//ends the conditional block }