Debug (Clase) (C++/CLI)
Cuando se usa Debug en una aplicación de Visual C++, el comportamiento no cambia entre una compilación de depuración y una de versión.
Comentarios
El comportamiento de Trace es idéntico al comportamiento de la clase Debug, pero depende del símbolo TRACE que se está definiendo. Esto significa que debe aplicar #ifdef
a cualquier código relacionado con Trace para evitar el comportamiento de depuración en una compilación de versión.
Ejemplo: Siempre ejecuta instrucciones de salida
Descripción
En el ejemplo siguiente, siempre se ejecutan las instrucciones de salida, independientemente de si la compilación se realiza con /DDEBUG o con /DTRACE.
Código
// 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");
}
Output
Entering Main
Hello World.
Exiting Main
test
Ejemplo: Uso de las directivas #ifdef y #endif
Descripción
Para obtener el comportamiento esperado (es decir, que no se imprima ninguna salida de "prueba" para una compilación de versión), debe usar las directivas #ifdef
y #endif
. El ejemplo de código anterior se modifica a continuación para mostrar esta corrección:
Código
// 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
}