我想使用TRACE()宏在調試窗口Visual Studio 2005中獲取非C++項目的非MFC輸出,但需要哪些額外的頭文件或庫?如何在非MFC項目中使用TRACE宏?
有沒有辦法將消息放入調試輸出窗口,我該怎麼做?
我想使用TRACE()宏在調試窗口Visual Studio 2005中獲取非C++項目的非MFC輸出,但需要哪些額外的頭文件或庫?如何在非MFC項目中使用TRACE宏?
有沒有辦法將消息放入調試輸出窗口,我該怎麼做?
找到建立自己的。
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
然後只是#包括 「trace.h裏」 和你所有的設置。免責聲明:我只是從個人項目複製/粘貼此代碼,並拿出一些項目特定的東西,但沒有理由它不應該工作。 ;-)
您可以嘗試DebugOutputString函數。 TRACE僅在調試版本中啓用。
如果您使用ATL,您可以嘗試ATLTRACE。
TRACE在afx.h定義爲(至少在VS 2008):
// extern ATL::CTrace TRACE;
#define TRACE ATLTRACE
而且ATLTRACE可以atltrace.h
我想用這種這種方法卻存在與此走來了一些額外的ATL行李一個不是ATL的項目。我正在與C++/CLI一起使用Window窗體並添加`atltrace.h`包含導致的編譯器錯誤,所以我採用了使用`OuputDebugString()`的方法,因爲我只是在幾個地方輸出了幾個文本字符串。 – 2015-06-22 23:44:56
在我的理解wvsprintf格式有問題。使用_vsnprintf(或thcar版本_vsntprintf),而不是
感謝這些答案我有固定我的錯誤:-)
在這裏我分享C++我跟蹤宏基於由費魯吉歐和enthusiasticgeek想法。
#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');
}
任何改進/建議/貢獻,歡迎;-)
wvsprintf不處理浮點數(%f)。相反,可以使用vsprintf。 – JcMaco 2011-11-29 18:51:03