Debugging eines falschen Outputs
Ziel
Ich bin in der Lage, mittels Debugger durch ein Programm zu navigieren und zielstrebig einen Versagen aufzufinden und zu beheben.
Arbeitsschritte
Der nächste Bug: Falscher Output
Das Programm läuft jetzt hoffentlich ohne Abstürze, allerdings ist die Ausgabe noch nicht wie erwartet. Anstatt eine Auflistung der Zutaten sortiert nach Abteilung im Supermarkt zu erhalten, hat jede Zutat ihren eigenen Eintrag erhalten. Vergleichen Sie dazu diese beiden Ausgaben.
Aktueller Output für 0,0,4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|
Gewünschter Output für 0,0,4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
Anders als bei einem Programmabsturz wie in der ersten Aufgabe ist hier nicht so klar, wo man mit der Suche nach dem Defekt anfangen soll.
Finden des Versagens
- 1 Finden und nennen Sie die Stellen im Quellcode, die die Ausgabe des Programms regeln.
- 2 Beschreiben Sie den Aufbau dieser Funktion.
- Was wird alles in dieser Funktion definiert?
- Welche Variablen und Funktionen werden tatsächlich benutzt?
- Welchen Inhalt haben diese Variablen?
- Wo genau findet die Ausgabe der Zutaten statt?
- Setzen Sie einen Breakpoint bei der für die Ausgabe zuständigen Funktion und starten Sie den Debugger.
- Springen Sie mittels Debugger zum Anfang der Schleife, in der die Ausgabe erzeugt wird.
- 3 Stimmen die Inhalte der Variablen damit überein, was von ihnen verlangt wird?
- 4 An dieser Stelle sind für diesen Fall alle Informationen vorhanden, um das Versagen
aufzuklären. Beschreiben Sie in eigenen Worten, wie das Versagen zustande kommt. - 1 Beheben Sie den zugrunde liegenden Defekt.
- 1 Machen Sie einen separaten Commit des korrigierten Quellcodes und zeigen Sie dann
git -P show HEAD
. - 2 Führen Sie das Programm
grocery_list.py
im Terminal aus. Geben Sie die Ausgabe des Programms mit der Eingabe0,0,4
an.
Abgabe
Geben Sie den Quellcode ab, wie er am Ende der Aufgabe vorliegt.
Geben Sie ein Kommandoprotokoll ab, das genau nur die Eingaben und Ausgaben der obigen Kommandos 1, 2, … enthält. Entfernen Sie vor Abgabe eventuelle Fehlversuche und sonstige zusätzliche Kommandos aus dem Protokoll.
Geben Sie ein Markdown-Dokument ab mit knappen Antworten zu den oben gestellten Fragen
1, 2, … Geben Sie diese Marker mit an.
Geben Sie ggf. Beispiele oder benutzte Quellen an.