我想使用TRACE()宏在非Visual Studio 2005 C ++项目的MFC中的调试窗口中获取输出,但需要哪个额外的头文件或库?
有没有办法将消息放入调试输出窗口,我该怎么做?
答案 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