如何在非MFC项目中使用TRACE宏?

时间:2009-01-30 06:27:39

标签: c++ visual-c++ visual-studio-2005

我想使用TRACE()宏在非Visual Studio 2005 C ++项目的MFC中的调试窗口中获取输出,但需要哪个额外的头文件或库?

有没有办法将消息放入调试输出窗口,我该怎么做?

6 个答案:

答案 0 :(得分:28)

建立自己的。

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

然后只需#include“trace.h”就可以了。

免责声明:我只是从个人项目中复制/粘贴此代码并获取一些项目特定的东西,但没有理由不应该工作。 ; - )

答案 1 :(得分:7)

如果您使用ATL,可以尝试ATLTRACE。

TRACE在afx.h中定义为(至少在vs 2008中):

// extern ATL::CTrace TRACE;
#define TRACE ATLTRACE

ATLTRACE可以在atltrace.h找到。

答案 2 :(得分:3)

您可以尝试DebugOutputString函数。 TRACE仅在调试版本中启用。

答案 3 :(得分:1)

据我所知,wvsprintf存在格式化问题。请改用_vsnprintf(或thcar version _vsntprintf)

答案 4 :(得分:1)

感谢这些答案,我修复了我的错误: - )

在这里,我根据Ferruccio和passionsticgeek的想法在C ++中分享我的TRACE宏。

#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

示例:

#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');
}

欢迎任何改进/建议/贡献; - )

答案 5 :(得分:0)

我在网上看到了以下内容: #define TRACE printf

对此进行一些开发,提出了以下建议:

#ifdef _DEBUG
#define TRACE printf
#else
#define TRACE 
#endif