Fehlersuche (Debugging)
"Hilfe: Der will meinen Code nicht ausführen :-("
Manchmal sucht ein Entwickler viele Stunden nach einem einzigen Fehler. (Du glaubst gar nicht wie lange ich an dem Roboter-Lernprogramm programmiert habe, bis es fehlerfrei lief)
Der Debugger und die Browser-Entwicklertools sind deine besten Freunde bei der Fehlersuche:
"robotMain() not found"
Manchmal kann dir jedoch der Debugger nicht einmal den richtigen Fehler anzeigen. Wenn du z.B. den Fehler "robotMain() not found" bekommst, hast du dich irgendwo verschrieben und musst ganz genau prüfen wo der Schreibfehler ist. Du löst das Problem, indem du den Code Schritt-für-Schritt liest. Im Zweifelsfall musst du deinen Code kurzzeitig löschen, um die fehlerhafte Stelle zu finden!
Neue Text-Nachricht: Kannst du mir kurz helfen?
Du erinnerst dich an den nervigen Kollegen?
Er hat durch dich auch von lerneProgrammieren.de erfahren und mit dem Anfängerkurs losgelegt. Er hat dir eine Nachricht geschrieben, weil er irgendwie nicht weiter kommt...
Na toll. Aber zumindestens ist die Nachricht positiv:
Das ist die perfekte Gelegenheit um zu üben, wie du Fehler in Programmen findest.
Das wird nicht das letzte Mal sein, dass du einen Fehler findet musst. Das Fehlersuchen in fremdem Code ist übrigens umso schwieriger.
Du kannst den Code und die Screenshots herunterladen. Bringe das Programm ans Laufen!
Aufgabe: Wieviele Fehler kannst du finden?
Wenn du den Code öffnest wirst du ein ganz normales Programm finden.
- Kopiere den Code in dein Roboterprogramm und versuche es auszuführen. Du wirst sehen, dass es nicht funktioniert. Das ist der Punkt, an dem deine Analyse startet.
- Schaue in den Code und starte den Lösungsfindungsprozess. Arbeite den Code Schritt für Schritt durch und benutze den Debugger als Hilfe (Genauso arbeiten Programmierer).
- Vier Fehler verhindern das Programm und zwei Fehler sind einfach unschön programmiert. (Mein Vorschlag: Gehe nicht weiter, bis du diese Fehler nicht von selbst gefunden hast. Bei deinen eigenen Fehlern hast du nachher nur deine Werkzeuge und keine Hilfestellung mehr.)
Wenn du nicht weiterkommst, findest du hier die Lösung:
[lp_spoiler title="robotControl_loesung.js - LÖSUNG anzeigen" class="da"]
robotControl_loesung.js
Nachfolgend findest du die Lösung. Alternativ kannst du die Datei auch herunterladen
//Roboterverhalten Hauptfunktion
function robotMain()
{
geheZuTunnel();
holeBall(); //Hier hat er die falschen Klammern benutzt
geheZurFahne();
}
function geheZuTunnel()
{
dreheRechts();
schnellGeradeAus();
geradeAus();
dreheRechts();
geradeAus();
geradeAus();
geradeAus();
dreheRechts();
}
function holeBall() {
geradeAus();
geradeAus();
geradeAus();
linksKurve();
schnellGeradeAus();
rechtsKurve();
schnellGeradeAus();
linksKurve();
schnellGeradeAus();
rechtsKurve();
schnellGeradeAus();
linksKurve();
geradeAus();
hebAuf(); //Hier hat er den Befehl falsch geschrieben
//umdrehen();
//umdrehen(); //Zweimal umgedreht, wieso?
}
function geheZurFahne()
{
rausAusTunnel1();
geheZuTunnel2(); //Hier hat er die falsche Funktion aufgerufen, ist ja der zweite Tunnel
geheDurchTunnel2();
}
function geheZuTunnel2()
{
linksKurve();
schnellGeradeAus();
geradeAus();
geradeAus();
geradeAus();
dreheLinks();
}
function geheDurchTunnel2()
{
schnellGeradeAus();
schnellGeradeAus();
schnellGeradeAus();
geradeAus(); //ein geradeAus vergessen und schon läuft das ganze nicht mehr zu Ende
rechtsKurve();
langerTunnel();
geradeAus();
geradeAus();
geradeAus();
linksKurve();
langerTunnel();
geradeAus();
geradeAus();
geradeAus();
}
function rausAusTunnel1()
{
dreheLinks();
geradeAus();
geradeAus();
dreheRechts();
geradeAus();
geradeAus();
geradeAus();
linksKurve();
schnellGeradeAus();
rechtsKurve();
schnellGeradeAus();
linksKurve();
schnellGeradeAus();
rechtsKurve();
schnellGeradeAus();
}
function linksKurve()
{
dreheLinks();
geradeAus();
geradeAus();
dreheLinks();
}
function rechtsKurve()
{
dreheRechts();
geradeAus();
geradeAus();
dreheRechts();
}
//3 mal dreheLinks()
function dreheRechts()
{
dreheLinks();
dreheLinks();
dreheLinks();
}
//nur 180 Grad Drehung
function umdrehen()
{
dreheLinks();
dreheLinks();
}
function langerTunnel()
{
schnellGeradeAus();
schnellGeradeAus();
schnellGeradeAus();
schnellGeradeAus();
//schnellGeradeAus(); //Ist kein direkter Fehler aber im Tunnel fährt der Roboter immer gegen die Wand.
}
function schnellGeradeAus()
{
geradeAus();
geradeAus();
geradeAus();
geradeAus();
}
[/lp_spoiler]
Wie immer gilt: Wer Aufgaben und Übungen überspringt, schadet sich selbst. Du möchtest das Programmieren lernen und dazu gehört auch das Lösen von Programmierfehlern.
Wenn du soweit bist, sehe ich dich in der nächsten Lektion wieder. Bis gleich!