如何写入Visual Studio中的输出窗口?

我应该使用哪个函数将文本输出到Visual Studio中的“输出”窗口?

我试过printf()但没有显示出来。

OutputDebugString函数将做到这一点。

示例代码

  void CClass::Output(const char* szFormat, ...) { char szBuff[1024]; va_list arg; va_start(arg, szFormat); _vsnprintf(szBuff, sizeof(szBuff), szFormat, arg); va_end(arg); OutputDebugString(szBuff); } 

如果这是为了debugging输出,那么OutputDebugString是你想要的。 一个有用的macros:

 #define DBOUT( s ) \ { \ std::ostringstream os_; \ os_ << s; \ OutputDebugString( os_.str().c_str() ); \ } 

这可以让你说这样的话:

 DBOUT( "The value of x is " << x ); 

您可以使用__LINE____FILE__macros来扩展它,以提供更多信息。

对于那些在Windows和广angular土地:

 #include <Windows.h> #include <iostream> #include <sstream> #define DBOUT( s ) \ { \ std::wostringstream os_; \ os_ << s; \ OutputDebugStringW( os_.str().c_str() ); \ } 

使用OutputDebugString函数或TRACEmacros(MFC),它使您可以执行printf样式的格式化:

 int x = 1; int y = 16; float z = 32.0; TRACE( "This is a TRACE statement\n" ); TRACE( "The value of x is %d\n", x ); TRACE( "x = %d and y = %d\n", x, y ); TRACE( "x = %d and y = %x and z = %f\n", x, y, z ); 

常见解决scheme

 #include <iostream> //... std::cerr << "Text" << std::endl; 

使用OutputDebugString而不是afxDump。

例:

 #define _TRACE_MAXLEN 500 #if _MSC_VER >= 1900 #define _PRINT_DEBUG_STRING(text) OutputDebugString(text) #else // _MSC_VER >= 1900 #define _PRINT_DEBUG_STRING(text) afxDump << text #endif // _MSC_VER >= 1900 void MyTrace(LPCTSTR sFormat, ...) { TCHAR text[_TRACE_MAXLEN + 1]; memset(text, 0, _TRACE_MAXLEN + 1); va_list args; va_start(args, sFormat); int n = _vsntprintf(text, _TRACE_MAXLEN, sFormat, args); va_end(args); _PRINT_DEBUG_STRING(text); if(n <= 0) _PRINT_DEBUG_STRING(_T("[...]")); }