Mit welcher Funktion soll ich Text in das Fenster "Ausgabe" in Visual Studio ausgeben?
Ich habe es versucht, printf()
aber es wird nicht angezeigt.
c++
visual-c++
Klemme
quelle
quelle
WCHAR szBuff[1024]
_vsnwprintf
Wenn dies für die Debug-Ausgabe ist, ist OutputDebugString genau das, was Sie wollen. Ein nützliches Makro:
#define DBOUT( s ) \ { \ std::ostringstream os_; \ os_ << s; \ OutputDebugString( os_.str().c_str() ); \ }
Auf diese Weise können Sie Dinge sagen wie:
DBOUT( "The value of x is " << x );
Sie können dies mit den Makros
__LINE__
und erweitern__FILE__
, um noch mehr Informationen zu erhalten.Für diejenigen in Windows und Wide Character Land:
#include <Windows.h> #include <iostream> #include <sstream> #define DBOUT( s ) \ { \ std::wostringstream os_; \ os_ << s; \ OutputDebugStringW( os_.str().c_str() ); \ }
quelle
Verwenden Sie die
OutputDebugString
Funktion oder dasTRACE
Makro (MFC), mit dem Sie dieprintf
Formatierung im Stil durchführen können: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 );
quelle
Nützlicher Tipp - wenn Sie Ihr Debug verwenden
__FILE__
und__LINE__
dann wie folgt formatieren:"file(line): Your output here"
Wenn Sie dann im Ausgabefenster auf diese Zeile klicken, springt Visual Studio direkt zu dieser Codezeile. Ein Beispiel:
#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)
Ich habe einen Blog-Beitrag darüber geschrieben, damit ich immer wusste, wo ich ihn nachschlagen kann: https://windowscecleaner.blogspot.co.nz/2013/04/debug-output-tricks-for-visual-studio.html
quelle
Verwenden Sie OutputDebugString anstelle von afxDump.
Beispiel:
#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("[...]")); }
quelle
#define WIN32_LEAN_AND_MEAN #include <Windows.h> wstring outputMe = L"can" + L" concatenate\n"; OutputDebugString(outputMe.c_str());
quelle
#include <string>
Obwohl
OutputDebugString
tatsächlich eine Zeichenfolge an die Debugger-Konsole gedruckt wird, ist es nicht genau soprintf
, dass letztere Argumente mit der%
Notation und einer variablen Anzahl von Argumenten formatieren kann , wasOutputDebugString
jedoch nicht funktioniert.Ich würde den Fall vertreten, dass das
_RPTFN
Makro,_CRT_WARN
zumindest mit Argument, in diesem Fall ein besserer Bewerber ist - es formatiert die Hauptzeichenfolge ähnlich wie dasprintf
Schreiben des Ergebnisses in die Debugger-Konsole.Eine kleinere (und seltsam, meiner Meinung nach ) mit Vorbehalt ist , dass es erfordert mindestens ein Argument nach dem Format - String (der mit allen
%
für die Substitution), eine Beschränkungprintf
ist nicht leiden.In Fällen, in denen Sie eine
puts
ähnliche Funktionalität benötigen - keine Formatierung, nur das Schreiben der Zeichenfolge wie sie ist - gibt es ein Geschwister_RPTF0
(das Argumente ignoriert, die der Formatzeichenfolge folgen, eine weitere seltsame Einschränkung). OderOutputDebugString
natürlich.Übrigens gibt es auch alles von
_RPT1
bis,_RPT5
aber ich habe sie nicht ausprobiert. Ehrlich gesagt verstehe ich nicht, warum so viele Verfahren bereitgestellt werden, die im Wesentlichen dasselbe tun.quelle