Konsolenfenster für std::cout bei Windows-Anwendung
-
Ich mache meine ersten Schritte mit der WinAPI und finde eines jetzt schon unkomfortabel: Debugging-Ausgabe erzeugen. Das meiste geht zwar mit dem Debugger, aber jetzt in einem konkreten Fall hätte ich es schöner gefunden, wenn ich nebenher nen Trace hätte laufen lassen können.
Bei SDL-Spielereien habe ich das immer so gemacht und jetzt frage ich mich, gibt es eine Möglichkeit, das für Windows-Anwendungen umzusetzen? Mit dem Windows-Subsystem krieg ich ja schonmal kein Konsolenfenster mehr...
Falls nicht, gibt es Tricks, mit dem Debugger was zu machen, das dem möglichst nahe kommt?
-
OutputDebugString !?
Und anzeigen entweder im Debugger oder mit DebugView:
http://www.microsoft.com/technet/sysinternals/Miscellaneous/DebugView.mspxDer Debugger selber kann auch Trace-Ausgaben machen...
Auf die entsprechende Zeile gehen, dann Rechts Maustaste und "Breakpoint", dann dort auf "Insert Tracepoint".
Wenn Du an dieser Zeile z.B: die Variable "szTest" ausgeben willst, gibst Du Folgendes ein:Der Wert von szTest ist {szTest}Dies wird dann in den Debug-Ausgaben (im Output-Fenster) im Debugger angezeigt.
Ausser Variablen kannst Du auch andere Dinge wie
- $FUNCTION (aktueller Funktionsname)
- $CALLER (vorheriger Funktionsname)
- $TNAME, $TID (Threadname bzw. ID)
- $CALLSTACK
- $ADDRESS
ausgeben lassen...Also ein wirklich sehr mächtiges Werkzeug!
-
Cool, schön das mir das auch mal jemand sagt

-
Mit AllocConsole kannst du ein Konsolenfenster öffnen und dann musst du noch mit freopen stdout neu setzen und dann kannst du std::cout wie gewohnt verwenden
-
http://support.microsoft.com/kb/105305/en-us
=>
int hCrt; FILE *hf; AllocConsole(); hCrt = _open_osfhandle( (long) GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT ); hf = _fdopen( hCrt, "w" ); *stdout = *hf; i = setvbuf( stdout, NULL, _IONBF, 0 );
-
Mit freopen ist es aber viel schöner
-
........... schrieb:
Mit freopen ist es aber viel schöner
Beispiel?
-
freopen("CONOUT$", "w", stdout);Der Name CONOUT$ ist in der Doku zu CreateFile dokumentiert.
-
Der Unterschied besteht halt darin, dass _fdopen das "richtige" (möglicherweise redirecte) Handle benutzt und "CONOUT$" immer auf die Console geht...
Wenn jetzt jemand das Std-handle der Console noch in eine Datei umleiten will, geht es mit Deinem Weg so nicht...
-
Sehr schön, das mit dem Debugger wusste ich ja noch gar nicht.
