Visual C++ 2008 - Fragen zum Funktionsumfang des Debuggers



  • Erstmal Hallo an alle,
    ich bin neu in dieser Community und habe vor einigen Monaten angefangen mich C++ zu befassen. Bevor ich mit C++ richtig anfing, habe ich mich mit einer BASIC-Sprache beschäftigt und habe eben nun einige Fragen zum Debugger von Visual C++ 2008 (Express Edition) 😕 .

    - Ist es möglich irgendwelche kurzen Texte wie "Die Schleife lief X-Mal durch" im Ausgabefenster oder ähnlichem auszugeben ?
    - Kann ich irgendwo einen Variablenwerte oder kompletten Array einsehen ?
    - Muss ich dazu eine zusätzliche Bibleothek oder ähnliches einbinden ?

    Ich wär echt froh wenn mir jemand helfen könnte, da ich schon ewig gegoogled habe und ich echt nichts gefunden habe was mir weiterhelfen konnte.

    Viele Grüße,
    Fusselohr 🙂



  • - Ist es möglich irgendwelche kurzen Texte wie "Die Schleife lief X-Mal durch" im Ausgabefenster oder ähnlichem auszugeben ?

    OutputDebugString("text");

    - Kann ich irgendwo einen Variablenwerte oder kompletten Array einsehen ?

    Setz einen Haltepunkt, dann Maus über die Variable, voila, da steht der Wert. Ansonsten siehe Fenster "Auto", "Lokal". Oder setz die Variable auf die Watchlist.

    - Muss ich dazu eine zusätzliche Bibleothek oder ähnliches einbinden ?

    Nein.

    edit:
    Scorchers Trick #42:
    Man kann sogar MemoryLeaks im Output anzeigen lassen. Folgenden Code direkt an den Start deiner Anwendung:

    #if defined (_DEBUG) && defined(_MSC_VER)
                long flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
                flag |= _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF;
                _CrtSetDbgFlag(flag);
    #endif /* _MSC_VER && _DEBUG */
    

    Am Anfang vom Code dann noch #include <crtdbg.h>. Fertisch.
    Viel Spaß.
    rya.



  • Vielen, vielen Dank für die schnelle Antwort :). Klappt alles Wunderbar.

    Dickes Danke,
    Fusselohr



  • Kleine Ergänzungen:

    - OutputDebugString ist natürlich besonders effizient, wenn du nicht nur fixe Strings ausgibst, sondern auch Inhalte von Variablen. Bastel dir einen String mit sprintf, std::string oder CString zusammen und gib ihn dann mit OutputDebugString aus.

    - Haltepunkte (Breakpoints) sind immens wichtig! So kannst du dir nicht nur zwischendurch mal den Inhalt einer Variablen ansehen, sondern du kannst auch ab diesem Punkt schrittweise durch den Code wandern (im VS standardmäßig die Tasten F10 und F11). Anfänger machen oft den Fehler, Ungereimtheiten im Code durch besonders intensives Hingucken entdecken zu wollen ( 😉 ), anstatt einfach mal schrittweise alles abzuklappern.

    - Es gibt auch Datenhaltepunkte. Diese wunderbaren Dinger sagen dir nicht an einer bestimmten Stelle im Code bescheid, sondern wenn sich der Inhalt einer Stelle im Speicher (einer Variablen) ändert. In manchen Szenarien sehr sinnvoll.

    - Du kannst den Inhalt von Variablen auch zur Laufzeit (wenn das Programm angehalten wurde) einfach mal ändern. Auch sehr praktisch.

    - Der Callstack (Aufrufliste) zeigt dir, von welcher Funktion die aktuelle Funktion aufgerufen wurde (das geht bis nach ganz oben). Unheimlich wichtig!

    - Man kann sich auch den Arbeitsspeicher ansehen. Du kannst z.B. einfach einen Pointer per D&D in die Ansicht ziehen, und schon siehst du, was denn da eigentlich wirklich im Speicher steht.

    So ein Debugger ist schon recht mächtig. Man muss nur lernen, ihn zu nutzen! 🙂



  • Auchn dickes Danke an dich _matze ^^.

    Hätt ich gewusst das ich hier so schnelle und kompetente Hilfe krieg hätt ich nie solange gegoogled xD.

    Gruß Fussel


Anmelden zum Antworten