Debuggen mit Visual Studio 2017

Zum Testen eines Programms ist es häufig nicht ausreichend, das äußere Verhalten zu studieren. Als Hilfsmittel gibt es hierfür den sogenannten Debugger. (Ein Bug ist ein Fehler, ein Debugger ist somit ein "Entfehlerer".) In diesem Abschnitt erstellen wir zunächst ein Programm zur Temperaturumrechnung von Fahrenheit in Celsius. Danach wollen wir das Programm mit dem Debugger untersuchen.

Das Programm Temperatur erstellen

Gehen Sie wie folgt vor:

  • Erstellen Sie ein leeres Projekt mit Namen Temperatur.
  • Fügen Sie dem Projekt eine leere Quellcode-Datei mit Namen Temperatur.c hinzu (siehe hello world).
  • Geben Sie folgenden Quellcode ein:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        float f, c;
    
        printf("Fahrenheit - Celsius\n");
        f = 0;
        while(f<=300) {
            c = 5/9*(f-32);
            printf("%9.0f  -  %5.1f\n", f, c);
            f = f+50;
        }
    
        system("pause");
        return 0;
    }
      
  • Erstellen Sie das ausführbare Programm mit der Taste F7 oder wählen Sie im Menü Build die Option Build Solution.
  • Starten Sie das Programm mit den Tasten Ctrl+F5.
  • Es sollte sich folgende Ausgabe ergeben:
    Fahrenheit - Celsius
            0  -   -0.0
           50  -    0.0
          100  -    0.0
          150  -    0.0
          200  -    0.0
          250  -    0.0
          300  -    0.0
    Druecken Sie eine beliebige Taste . . .

Bei dem Programm ist offensichtlich etwas nicht in Ordnung. Da wir den Fehler nicht unmittelbar erkennen, soll jetzt der Debugger zum Einsatz kommen.

Symbolleiste für den Debugger

Wenn nicht schon geschehen, aktivieren Sie zunächst die Toolbar für den Debugger:

Symbolleiste: Debugger

  • Klicken Sie mit der rechten Maustaste über eine der vorhandenen Toolbars.
  • Wählen Sie im Kontextmenü die Option Debug.

Programm mit dem Debugger testen

Gehen Sie wie folgt vor:

  • Suchen Sie in Ihrem Quellcode die Zeile, in der die Berechnung stattfindet (c = 5/9*(f-32);).
  • Zeigen Sie mit der Maus auf den grauen Rand links neben der Zeile und betätgien Sie die linke Maustaste. Es erscheint ein Roter Punkt:
Breakpoint im Quellcode
  • Starten Sie Ihr Programm im Debug-Modus mit der Taste F5 oder mittels Menü unter Debug mit dem Eintrag Start Debugging.

Das Programm wird bis zum angegebenen Breakpoint ausgeführt. Die aktuelle Position wird durch den gelben Pfeil angezeigt.

Breakpoint im Quellcode

Im linken Teil des Ausgabebereichs mit der Reiterbeschriftung Autos können Sie den aktuellen Wert der Variablen f und c sehen. In diesem Bereich werden alle aktuellen Variablen gezeigt. Um bestimmte Variablen dauerhaft zu beobachten, fügen wir diese in einen gesonderten Bereich ein:

  • Bewegen Sie die Maus über die Variable f, z.B. in der Zeile mit dem Breakpoint.
  • Betätigen Sie die rechte Maustaste und wählen Sie aus dem Kontextmenü die Option Add Watch.

Im Ausgabebereich ist jetzt der Reiter mit Namen Watch 1 aktiviert und es wurde die Variable f in die Liste eingetragen.

  • Tragen Sie die Variable c in die Liste von Überwachen 1 ein.

Es ergibt sich folgendes Bild im Ausgabebereich:

Ausgabebereich: Überwachen 1

Hinweis: Der Wert der Variable c kann bei Ihnen anders sein.

  • Betätigen Sie nun mehrfach die Taste Taste: Debug-Step, um sich schrittweise durch das Programm zu arbeiten.
  • Zum Beenden des Debuggers betätigen Sie die Taste Taste zum Stoppen des Debuggers.

Das Problem in dem Programm ist, dass bei der Berechnung von links mit 5/9 begonnen wird. Da Dividend und Divisor beide vom Typ int sind, ist auch das Zwischenergebnis vom Typ int und wird in Richtung null gerundet (d.h. es werden alle Nachkommastellen abgeschnitten). Damit nimmt auch der gesamte Ausdruck den Wert null an. Mehr dazu in der Vorlesung, bzw. im Skript zur Vorlesung.

Ändern Sie die Zeile zu

    c = 5*(f-32)/9;

und testen Sie Ihr Programm erneut. Es ergibt sich folgende Ausgabe:

    Fahrenheit - Celsius
            0  -  -17.8
           50  -   10.0
          100  -   37.8
          150  -   65.6
          200  -   93.3
          250  -  121.1
          300  -  148.9
    Druecken Sie eine beliebige Taste . . .
    
Seite 0