x64 visual microsoft c++ visual-c++ visual-studio-2005

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