Dela via


Felsökningsklass (C++/CLI)

När du använder Debug i ett Visual C++-program ändras inte beteendet mellan en debuggversion och en releaseversion.

Anmärkningar

Beteendet för Trace är identiskt med beteendet för felsökningsklassen, men är beroende av symbolen TRACE som definieras. Det innebär att du måste #ifdef spårningsrelaterad kod för att förhindra felsökningsbeteende i en release-version.

Exempel: Kör alltid utdatainstruktioner

Beskrivning

Följande exempel kör alltid utdatainstruktionerna, oavsett om du kompilerar med /DDEBUG eller /DTRACE.

Kod

// mcpp_debug_class.cpp
// compile with: /clr
#using <system.dll>
using namespace System::Diagnostics;
using namespace System;

int main() {
   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");
}

Utgång

    Entering Main
Hello World.
    Exiting Main
test

Exempel: Använda #ifdef- och #endif-direktiv

Beskrivning

För att få det förväntade beteendet (dvs. inga "test"-utdata som skrivs ut för en versionsversion) måste du använda direktiven #ifdef och #endif . Föregående kodexempel ändras nedan för att demonstrera den här korrigeringen:

Kod

// mcpp_debug_class2.cpp
// compile with: /clr
#using <system.dll>
using namespace System::Diagnostics;
using namespace System;

int main() {
   Trace::Listeners->Add( gcnew TextWriterTraceListener( Console::Out ) );
   Trace::AutoFlush = true;
   Trace::Indent();

#ifdef TRACE   // checks for a debug build
   Trace::WriteLine( "Entering Main" );
   Console::WriteLine( "Hello World." );
   Trace::WriteLine( "Exiting Main" );
#endif
   Trace::Unindent();

#ifdef DEBUG   // checks for a debug build
   Debug::WriteLine("test");
#endif   //ends the conditional block
}

Se även

.NET-programmering med C++/CLI (Visual C++)