c++ - visual - ¿Cómo puedo usar la macro TRACE en proyectos que no son MFC?
microsoft visual c++ 2018 (5)
Construye tu propio.
trace.cpp:
#ifdef _DEBUG
bool _trace(TCHAR *format, ...)
{
TCHAR buffer[1000];
va_list argptr;
va_start(argptr, format);
wvsprintf(buffer, format, argptr);
va_end(argptr);
OutputDebugString(buffer);
return true;
}
#endif
trace.h:
#include <windows.h>
#ifdef _DEBUG
bool _trace(TCHAR *format, ...);
#define TRACE _trace
#else
#define TRACE false && _trace
#endif
entonces simplemente #include "trace.h" y ya está todo listo.
Descargo de responsabilidad: Copié / pegué este código de un proyecto personal y saqué algunas cosas específicas del proyecto, pero no hay ninguna razón por la que no debería funcionar. ;-)
Quiero utilizar la macro TRACE () para obtener resultados en la ventana de depuración en Visual Studio 2005 en un proyecto que no sea MFC C ++, pero ¿qué encabezado o biblioteca adicional se necesitan?
¿Hay alguna manera de colocar mensajes en la ventana de salida de depuración y cómo puedo hacer eso?
En mi entender, wvsprintf tiene problemas con el formateo. Use _vsnprintf (o la versión de thcar _vsntprintf) en su lugar
Gracias a estas respuestas he solucionado mi error :-)
Aquí comparto mi macro TRACE en C ++ basada en ideas de Ferruccio y entusiasticgeek.
#ifdef ENABLE_TRACE
# ifdef _MSC_VER
# include <windows.h>
# include <sstream>
# define TRACE(x) /
do { std::stringstream s; s << (x); /
OutputDebugString(s.str().c_str()); /
} while(0)
# else
# include <iostream>
# define TRACE(x) std::clog << (x)
# endif // or std::cerr << (x) << std::flush
#else
# define TRACE(x)
#endif
ejemplo:
#define ENABLE_TRACE //can depend on _DEBUG or NDEBUG macros
#include "my_above_trace_header.h"
int main (void)
{
int v1 = 123;
double v2 = 456.789;
TRACE ("main() v1="<< v1 <<" v2="<< v2 <<''/n'');
}
Cualquier mejora / sugerencia / contribución es bienvenida ;-)
Puede probar la función DebugOutputString. TRACE solo está habilitado en las compilaciones de depuración.
Si usa ATL, puede probar ATLTRACE.
TRACE se define en afx.h como (al menos en comparación con 2008):
// extern ATL::CTrace TRACE;
#define TRACE ATLTRACE
Y ATLTRACE se puede encontrar en atltrace.h