Clase Debug en Visual C++
Actualización: noviembre 2007
Cuando se utiliza Debug en una aplicación de Visual C++, el comportamiento no cambia entre una depuración y una versión de lanzamiento.
Comentarios
El comportamiento para Trace es idéntico al comportamiento para la clase Debug, pero depende del símbolo TRACE que se defina. Es decir, debe aplicarse #ifdef al código relacionado con Trace para evitar un comportamiento de depuración en una versión de lanzamiento.
Ejemplo
Descripción
El ejemplo siguiente siempre ejecuta las instrucciones de salida, independientemente de que la compilación se realice con /DDEBUG o /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");
}
Resultado
Entering Main
Hello World.
Exiting Main
test
Ejemplo
Descripción
Para obtener el comportamiento esperado (es decir, que no se imprima "test" en una versión de lanzamiento), deben utilizarse las directivas #ifdef y #endif. A continuación modificamos el ejemplo de código anterior para mostrar la 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
}