Какую функцию следует использовать для вывода текста в окно «Вывод» в Visual Studio?
Я пробовал, printf()
но ничего не получается.
c++
visual-c++
зажим
источник
источник
WCHAR szBuff[1024]
_vsnwprintf
Если это для вывода отладки, то OutputDebugString - это то, что вам нужно. Полезный макрос:
#define DBOUT( s ) \ { \ std::ostringstream os_; \ os_ << s; \ OutputDebugString( os_.str().c_str() ); \ }
Это позволяет вам говорить такие вещи, как:
DBOUT( "The value of x is " << x );
Вы можете расширить это с помощью
__LINE__
и__FILE__
макросы , чтобы дать еще больше информации.Для тех, кто пользуется Windows и широким характером:
#include <Windows.h> #include <iostream> #include <sstream> #define DBOUT( s ) \ { \ std::wostringstream os_; \ os_ << s; \ OutputDebugStringW( os_.str().c_str() ); \ }
источник
Используйте
OutputDebugString
функцию илиTRACE
макрос (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 );
источник
Полезный совет - если вы используете,
__FILE__
а__LINE__
затем форматируете отладку как:"file(line): Your output here"
затем, когда вы щелкнете по этой строке в окне вывода, Visual Studio перейдет непосредственно к этой строке кода. Пример:
#include <Windows.h> #include <iostream> #include <sstream> void DBOut(const char *file, const int line, const WCHAR *s) { std::wostringstream os_; os_ << file << "(" << line << "): "; os_ << s; OutputDebugStringW(os_.str().c_str()); } #define DBOUT(s) DBOut(__FILE__, __LINE__, s)
Я написал об этом сообщение в блоге, поэтому всегда знал, где его найти: https://windowscecleaner.blogspot.co.nz/2013/04/debug-output-tricks-for-visual-studio.html
источник
Используйте 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("[...]")); }
источник
#define WIN32_LEAN_AND_MEAN #include <Windows.h> wstring outputMe = L"can" + L" concatenate\n"; OutputDebugString(outputMe.c_str());
источник
#include <string>
Несмотря на то, что
OutputDebugString
действительно выводит строку символов в консоль отладчика, это не совсем то,printf
что последняя может форматировать аргументы, используя%
нотацию и переменное количество аргументов, что-тоOutputDebugString
не происходит.Я бы сказал, что
_RPTFN
макрос,_CRT_WARN
по крайней мере с аргументом, в этом случае лучше подходит - он форматирует основную строку так же, какprintf
запись результата в консоль отладчика.Незначительная (и странно, на мой взгляд) предостережение с ним в том , что он требует , по крайней мере один аргумент следующий в строке формата (тот , со всеми
%
для замещения), ограничениеprintf
делает не страдает от.Для случаев, когда вам нужна
puts
подобная функциональность - без форматирования, просто запись строки как есть - есть ее родственник_RPTF0
(который игнорирует аргументы, следующие за строкой формата, еще одно странное предостережение). Или жеOutputDebugString
конечно.И, кстати, тоже есть все от
_RPT1
до,_RPT5
но я не пробовал. Честно говоря, я не понимаю, зачем предлагать столько процедур, которые по сути делают одно и то же.источник