Problem mit der Umleitung von stdout/stderr



  • Hallo,

    ich hab hier ein paar kleine Debugfunktionen geschrieben, hier mal ein kleiner Ausschnitt:

    int debug_lvl=DBG_ALL;
    FILE* debug_file=stdout;
    
    void _DPRINT(int lvl,char* format,...)
    {
        if(debug_lvl==DBG_ALL || lvl<=debug_lvl && debug_lvl!=DBG_NONE)
        {
    
             va_list args;
             va_start(args,format);
    
             fprintf(debug_file,"[debug %d]: ",lvl);
             vfprintf(debug_file,format,args);
    
             va_end(args);
        }
    }
    

    Mein Testprogramm:

    #include <iostream>
    #include "LogFunc.h" //Debug-Funktionen
    
    int main(int argc, char *argv[])
    {
        cout << "Das ist ein Test" <<endl;
    
        SetDebugLevel(DBG_ALL); //ein paar andere Debugfunktionen, ihr könnt ja
                                //erraten was die machen ;-)
        PrintDebugStatus();
        _DPRINT(0,"Hallo Welt!\n");
    }
    

    So, wenn ich jetzt mein Programm von der Konsole aus starte, dann funktioniert das auch erstmal.
    Konsole:

    >debug_test
    Das ist ein Test
    Hallo Welt
    

    So und wenn ich jetzt die Ausgabe umleiten will
    Konsole:

    >debug_test > debug.txt
    [Steht nichts da]
    

    und debug.txt sieht dann so aus:

    Das ist ein Test
    

    😕
    Sollte eigentlich die Debugnachrichten auch abspeichern, oder?



  • Fehler gefunden 😃
    Auch wenns gemein war. In den Debugfunktionen war eine Zugriffsverletzung, die zum Absturz geführt hat. Dummerweise an ner Stelle wo ichs nicht in der Ausgabe vom Programm sehen konnte. Und weder mein Debugger noch Windows haben irgendwie gemeckert, komisch.
    Durch den Absturz hat er leider den Dateipuffer nicht in die Datei geschrieben. Ich sollte wohl noch ein

    fflush(debug_file)
    

    einbauen ;-). Schließlich kommts in solchen Fällen ja gerade auf die Debugmeldungen an.


Log in to reply