Bei Window Entwicklung Debug output in 2´tem Fenster Commandline



  • hallo zusammen,

    ich bastel zur zeit an einem simplen GDI 2D Spiel.
    nun hab ich das problem das das spiel halt nicht immer das macht was ich will und ich dann immer überprüfen muss ob es an falschen werten in den ganzen arrays liegt oder doch ein fehler im progging. daher würde ich gerne in einem 2´ten Fenster in der Commandline die ganzen werte ausgen wenn ich sie mal brauche..

    das müsste doch irgendwie gehen, oder ?

    kann mir da einer einen tipp geben wie ich das angehen muss ?

    danke schonmal

    kai



  • So ein Fenster brauchst du nicht erzeugen, das gibt es schon (zumindest im Visual Studio). Du kannst dir Strings mit den gewünschten Werten zurechtbasteln und mit der Funktion OutputDebugString ausgeben. Dieser Text landet dann im Ausgabe-Fenster (in dem beim Erstellen auch die Compiler- und Linker-Meldungen erscheinen). Die Funktion macht auch nur was, wenn du als Debug kompilierst und stört im Release nicht.

    EDIT: Abgesehen davon sind natürlich auch Haltepunkte (und auch Datenhaltepunkte!) und schrittweises Ausführen (F10, F11) ein sehr sinnvoller Weg, um bestimmte Variablen oder Abläufe zu überprüfen.



  • hi _matze ,

    danke für die schnelle antwort.
    dann werd ich es auf diesem wege machen.
    wobei mir das mit dem 2´ten fenster besser gefallen hätte 😋

    cu
    kai



  • uwi2k2 schrieb:

    wobei mir das mit dem 2´ten fenster besser gefallen hätte 😋

    Natürlich könntest du dir z.B. eine Konsole erstellen (xxxConsolexxx-Funktionen), die dann deine Werte ausgibt (am besten auch nur, wenn _DEBUG definiert ist). Aber wozu dieser immense Mehraufwand, wenn's so einen Mechanismus doch schon gibt? Na ja, hauptsache man müllt sein Programm nicht zu mit Debug-Messageboxen. 😉



  • jo,

    genau diese müll message boxen will ich loserwden ...
    dachte mir "das kanns doch nicht sein" 😃

    cu
    kai



  • uwi2k2 schrieb:

    hi _matze ,

    danke für die schnelle antwort.
    dann werd ich es auf diesem wege machen.
    wobei mir das mit dem 2´ten fenster besser gefallen hätte 😋

    cu
    kai

    Dazu habe ich mal folgende Funktion gefunden:

    #include <windows.h>
    #include <stdio.h>
    #include <fcntl.h>
    #include <io.h>
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    // maximum mumber of lines the output console should have
    const WORD MAX_CONSOLE_LINES = 500;
    
    void RedirectIOToConsole()
    {
    	int hConHandle;
    	long lStdHandle;
    	CONSOLE_SCREEN_BUFFER_INFO coninfo;
    	FILE *fp;
    
    	// allocate a console for this app
    	AllocConsole();
    
    	// set the screen buffer to be big enough to let us scroll text
    	GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),	&coninfo);
    	coninfo.dwSize.Y = MAX_CONSOLE_LINES;
    	SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),	coninfo.dwSize);
    
    	// redirect unbuffered STDOUT to the console
    	lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
    	hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    
    	fp = _fdopen( hConHandle, "w" );
    
    	*stdout = *fp;
    	setvbuf( stdout, NULL, _IONBF, 0 );
    
    	// redirect unbuffered STDIN to the console
    	lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
    	hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    
    	fp = _fdopen( hConHandle, "r" );
    
    	*stdin = *fp;
    	setvbuf( stdin, NULL, _IONBF, 0 );
    
    	// redirect unbuffered STDERR to the console
    	lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
    	hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    
    	fp = _fdopen( hConHandle, "w" );
    
    	*stderr = *fp;
    	setvbuf( stderr, NULL, _IONBF, 0 );
    
    	// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
    	// point to console as well
    	ios::sync_with_stdio();
    }
    

    Ich habe die in einer eigenen Quelldatei gespeichert. Einfach kompilieren und die Objektdatei mit der eigentlichen Anwendung zusammenlinken. Aus der Anwendung dann einmal die in dem Modul enthaltene Funktion aufrufen, und schon gehen sämtliche printf und cout - Ausgaben in ein eigenes Konsolenfenster.
    Achtung: Selbiges wird sofort geschlossen, wenn die Anwendung beendet wird.


Anmelden zum Antworten