Werkzeuggestützte tzte Softwareprüfungen fungen Debugging Boris Tripolskij
Gliederung Motivation für Debugging Aufbau des Debuggers in Eclipse Arten von Debugging Tools Fehlerarten Delta Debugging Vorführung des Eclipse Debuggers If debugging is the process of removing bugs, then programming must be the process of putting them in... 2/28
Woher stammt Debugging Der Begriff Bug wurde ursprünglich von der Computerpionierin Grace Hopper geprägt. Im heutigen Deutsch ist es üblich, mit dem Begriff Bug einen Fehler in einem Computerprogramm zu bezeichnen. de bug 3/28
Was ist Debugging Fehlerbereinigung oder Debuggen bezeichnet in der Informatik das Auffinden, Diagnostizieren und Eliminieren von Fehlern in Hardware und vor allem von Programmfehlern in Software. 4/28
Debugger Ein Werkzeug zur Fehlerbereinigung von Software nennt sich Debugger. Der Debugger ermöglicht in der Regel eine Ablaufverfolgung des zu untersuchenden Programms in einzelnen Schritten oder zwischen definierten Haltepunkten. Ein Debugger ist oft Bestandteil einer Programm- Entwicklungsumgebung. 5/28
Der Stellenwert von Debugging Warum ist Debugging wichtig? Wie viel Zeit braucht man für Debugging? Wie wichtig sind dabei Tools? Plattformabhängigkeit von Debuggern 6/28
Ablauf (Fehlerhafer) Code Fehler wahrnehmen Fehlerquelle Isolieren Fehler treten auf Code Testen Fehlergrund finden Korrektur entwerfen Korrektur ausführen keine Fehler Weitestgehend fehlerbereinigter Code 7/28
Debugging Tools Debugging steht und fällt mit den eingesetzten Tools! Mögliche Tools sind: System.out.println(); Step-by-step Durchlauf Haltepunkte Bedingte Haltepunkte Variablen anzeigen Hotswap Remote Debugging Threadsteuerung Zukünftige Tools... Später zeige ich zu den meisten Tools einige Beispiele... 8/28
Eclipse Tools Autokorrektur (Quick fix) Vorherige Versionen wiederherstellen / vergleichen Refactoring Quellcode-Generatoren Wizards Hot Swapping 9/28
System.out out.println() (); Wie und wann sollte man System.out.println() benutzen? boolean debug=true; for(i=0; i<10; i++){ Variable_xy = wichtige_funktion(i); if(debug) System.out.println(Variable_xy); } 10/28
Step-by by-step Durchlauf Sollte benutzt werden, wenn man sich nicht mit dem Programm auskennt. Dient der schrittweisen Annäherung an den Programmablauf 11/28
Bedingte Haltepunkte können Hit-counts enthalten wenn ein Wert erreicht ist wenn ein Wert sich ändert 12/28
Variablen Anzeigen essentiell für richtiges Debugging Möglichkeit Variablen zur Laufzeit zu ändern tostring() Methode in eigenen Objekten überschreiben kritische Variablen können mit watch für spätere Durchläufe in ein spezielles Fenster eingefügt werden 13/28
Hot Swapping von Code Hot-Swapping von Code ab Java 1.4 der Code wird während der Laufzeit ersetzt kein Neustarten nötig Programm bleibt im erreichten Zustand 14/28
Remote Debugging Für das Ausführen auf anderen Architekturen Debbugger auf einen Rechner, Programm auf anderen Rechner Funktionalität wie bei normalem Debugging 15/28
Autokorrektur (Quick fix) Wird durch ein Doppelklick auf dem als Fehler markierten Zeilenrand ausgelöst. Beispiel: 16/28
Arten von Fehlern Syntaxfehler Syntaxwarnungen Laufzeitfehler Semantik Fehler Logik Fehler Threadfehler 17/28
Syntaxfehler Werden in der Regel vom Parser erkannt und tauchen vor dem eigentlichen Debugging auf. Programm mit Syntaxfehlern ist nicht lauffähig (in Java). Müssen behoben werden, um eine erste lauffähige Version für das Debuggen zu erhalten. boolean wichtige_variable = false; if (wichtige_variable=true) { kaputt_machen(alles); } 18/28
Syntaxwarnungen Programm kann ausgeführt werden, wenn Compilerparameter richtig gesetzt. Programm enthält evtl. versteckte Fehler. Sollten immer ernstgenommen werden. 19/28
Laufzeitfehler treten erst zur Laufzeit auf können sehr sporadisch und nicht immer reproduzierbar auftreten unterbrechen den Programmfluss müssen schnellstens behoben werden 20/28
Semantikfehler Werden nicht immer als Fehler durch den Compiler / Debugger erkannt. Programm kann oft trotzdem durchlaufen. Der Benutzer muss diese Art von Fehlern an den fehlerhaften Ausgaben erkennen. Sind für einen korrekten Programmablauf zu beheben. 21/28
Threadfehler Threadfehler stellen eine Königsdisziplin im Debbuging dar sind sehr schwer zu reproduzieren, treten pseudozufällig auf sind sehr schwer zu tracen treten oft bei Step-by-Step Ablauf nicht mehr auf müssen mit allen verfügbaren Tools angegangen werden 22/28
Delta Debugging Delta Debugging ist vollautomatisches Debugging? Delta Debugging isoliert fehlerverursachende Unterschiede: bei Eingaben bei Code-Änderungen bei Zuständen Delta Debugging ist ein rein testbasiertes Verfahren. 23/28
Delta Debugging Ein einziger Delta Debugging Algorithmus minimiert Testfälle. Entdeckt Fehler hervorrufende Änderungen in einem Programm. Entdeckt Fehler hervorrufende Anweisungen in einem Ausführungspfad. Dies gelingt dem Algorithmus durch systematisches Testen. 24/28
Funktionsweise von Delta Debugging Schrittweise Eingrenzung der Fehlerursache Beispiel HTML- Code mit 10.000 Zeilen 25/28
Delta Debugging Tools DDinput DDchange DDstate www.askigor.org 26/28
Beispiele Beispiel 1: Haltepunkte Step-by-Step Durchlauf Hot Swapping Beispiel 2: Threadfehler einige weitere Tools Vorführung DDchange 27/28
Zusammenfassung Debugging ist unverzichtbar, da es immer Fehler gibt. Debugging ist stark Technologie- und Plattformabhängig Tools erleichtern oder ermöglichen erst den Prozess Tools können Debugging nicht ersetzen, nur vereinfachen Delta Debugging ist zwar schön, funktioniert aber noch nicht 28/28