© Andreas Rau, 14.11.03 D:\home\ar\fhte\vorlesungen\informatik1\folien\informatik1-praxis-debugging.sdd #1
Vorlesung Informatik 1
Fachhochschule für Technik Esslingen Studiengang Wirtschaftsinformatik
Debugging
Dr. rer. nat. Andreas Rau
http://www.fht-esslingen.de/~rau andreas.rau@fht-esslingen.de
© Andreas Rau, 14.11.03 D:\home\ar\fhte\vorlesungen\informatik1\folien\informatik1-praxis-debugging.sdd #2
Beim Debugging muss grundsätzlich nach der Fehlerart unterschieden werden:
Übersetzungsfehler (compile-time errors)
Fehler, die während der Übersetzung des Programms entdeckt werden (nicht:
fehlerhafte Übersetzung), typischerweise Syntaxfehler, z.B. vergessene oder falsche Klammern, aber auch semantische Fehler wie z.B. inkompatible Typen.
Übersetzungsfehler haben die angenehme Eigenschaft, dass der Compiler Sie alle findet uns mit detaillierten Fehlermeldungen bei ihrer Beseitigung hilft.
Laufzeitfehler (runtime errors)
Fehler, die auftreten während das Programm läuft, z.B. Programmabstürze oder falsche Berechnungen. Diese haben die lästige Eigenschaften, dass Sie nur unter bestimmten Bedingungen auftreten, z.B. beim verwenden einer fehlerhaften Funktion oder bei bestimmten Datenkonstellationen. Dies hat oft zur Folge, dass Sie schlecht reproduzierbar, lokalisierbar und korrigierbar sind. Um Sie zu finden sind i.d.R. detaillierte Kenntnisse des Programms notwendig.
Grundsätzliche Vorgehensweise(1)
© Andreas Rau, 14.11.03 D:\home\ar\fhte\vorlesungen\informatik1\folien\informatik1-praxis-debugging.sdd #3
Immer beim ersten Fehler beginnen
Manche der nachfolgenden Fehler sind Folgefehler, z.B. weil der Compiler nach einer falschen Klammer durcheinander kommt, und lösen sich mit Behebung des ersten Fehlers von selbst.
Fehlermeldungen lesen
Die Fehlermeldung gibt Art und Ort des Fehlers an. Sie sind zwar Englisch aber verständlich und nach etwas Übung "kennt man seine Pappenheimer"
Umzingeln durch Auskommentieren
Manche Fehler sind schwer zu finden. In diesem Fall empfielt es sich, großzügig Codebereiche auszukommentieren bis der Fehler verschwunden ist. Dann kann im zuletzt auskommentierten Bereich gezielt weitergesucht werden.
Am Besten ist es natürlich, Übersetzungsfehler von Anfang an durch vernünftiges Layout usw. zu vermeiden bzw. die Fehlersuche durch diese Maßnahmen zu unterstützen. Trotzdem ist niemand völlig vor Syntaxfehlern sicher – der Rechner ist einfach zu pingelig...
Vorgehen bei Übersetzungsfehlern
© Andreas Rau, 14.11.03 D:\home\ar\fhte\vorlesungen\informatik1\folien\informatik1-praxis-debugging.sdd #4
Fehler reproduzieren
Zunächst ist es wichtig, die Situation zu rekonstruieren, in der der Fehler auftritt.
Fehler analysieren
Welche Programmteile werden in der fehlerhaften Situation benötigt? Was könnte hier passieren? Durch solche Fragen läßt sich (bei Kenntnis des Programms) ein Fehler in vielen Fällen "im Trockendock" identifizieren. Oft handelt es sich um Leichtsinnsfehler (off-by-one) oder vergessene Sonderfälle.
Fehler suchen
Wenn die Analyse nicht hilft, muss der Fehler im Debugger oder durch gezielte Kontrollausgaben näher untersucht werden.
Fehler beheben Selbsterklärend ;-) Abnahmetest
Hoffentlich erfolgloser Versuch, den Fehler trotz Behebung zu reproduzieren.