如何写入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
函数或TRACE
macros(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("[...]")); }