2009-01-30 74 views

回答

26

找到建立自己的。

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裏」 和你所有的設置。免責聲明:我只是從個人項目複製/粘貼此代碼,並拿出一些項目特定的東西,但沒有理由它不應該工作。 ;-)

+0

wvsprintf不處理浮點數(%f)。相反,可以使用vsprintf。 – JcMaco 2011-11-29 18:51:03

3

您可以嘗試DebugOutputString函數。 TRACE僅在調試版本中啓用。

7

如果您使用ATL,您可以嘗試ATLTRACE。

TRACE在afx.h定義爲(至少在VS 2008):

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

而且ATLTRACE可以atltrace.h

+0

我想用這種這種方法卻存在與此走來了一些額外的ATL行李一個不是ATL的項目。我正在與C++/CLI一起使用Window窗體並添加`atltrace.h`包含導致的編譯器錯誤,所以我採用了使用`OuputDebugString()`的方法,因爲我只是在幾個地方輸出了幾個文本字符串。 – 2015-06-22 23:44:56

1

在我的理解wvsprintf格式有問題。使用_vsnprintf(或thcar版本_vsntprintf),而不是

1

感謝這些答案我有固定我的錯誤:-)

在這裏我分享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'); 
} 

任何改進/建議/貢獻,歡迎;-)