Debug (Clase) (C++/CLI)
Al usar Depurar en una Visual C++, el comportamiento no cambia entre una depuración y una compilación 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á definindo. Esto significa que debe usar cualquier código relacionado con seguimiento #ifdef 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 se compila 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");
}
Resultados
Entering Main
Hello World.
Exiting Main
test
Ejemplo: Usar directivas #ifdef y #endif directivas
Descripción
Para obtener el comportamiento esperado (es decir, ninguna salida de "prueba" impresa para una compilación de versión), debe usar las #ifdef#endif directivas y . 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
}