Einheit 06: Debugging in Eclipse L.Raed Ludwig-Maximilians-Universität München Institut für Informatik Programmierung und Softwaretechnik Prof. Wirsing January 22, 2010 L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 1 / 37
Inhaltsverzeichnis 1 Debugging Motivation und Einführung Beispiel 2 Debug Perspectives Perspective Überblick Debug View Variables View Breakpoints View Expressions View Debug Editor View Display View 3 Debugging Techniken Wichtige Techniken Technik 1: Single Stepping Technik 2: Resuming Execution Technik 3: Breakpoints konfigurieren L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 2 / 37
Motivation Debugging Motivation und Einführung Testen mit JUnit JUnit testet lediglich die Erfüllung von einer Menge von Tests. Tritt ein Fehler auf, so kann JUnit nicht das WARUM antworten. JUnit Fehlermeldung, besagen WAS falsch war, nicht WARUM. Das Suchen nach dem WARUM kann sehr schwer und komplex sein. Fehlersuche mit dem Output: System.out.println() Viele Entwickler benutzten die Output um Fehler zu suchen. Es werden Werte der Feldvariablen, lokale Variablen gedruckt. Doch für große Programme verliert man schnell den Überblick! Fehlersuche mit Debugging Tools Debugging Tools zeigen die Werte der Variablen ordentlich in Tabellen. Debugging Tools unterstützen die Suche nach der Fehlerursache. Bei schwer zu findenden Fehlern sind Debugging-Tools fast ein MUSS. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 3 / 37
Einführung in Debugging Debugging Motivation und Einführung Was ist Debugging? Debugging ist eine Technik, mit der man logische Fehler sucht. Logische Fehler: sind Fehler, die keine Exception auswerfen. Logische Fehler: Code kompiliert, Programm Verhalten fehlerhaft! Was ist der Unterschied zwischen JUnit Test und Debugging? JUnit testet lediglich die Erfüllung von einer Menge von Tests. JUnit erkennt oft aber nicht die Ursache der (logischen) Fehler. Debugging kann dagegen nach der Ursache der logischen Fehler suchen. Eclipse verfügt über ein eigenes Debugging-Tool Breakpoints setzen in Javaklasse mit main Methode. Run Debug As Java Application. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 4 / 37
Debugging Motivation und Einführung Wann und wie wird Debugging eingesetzt? Wann benutzen wir die Debugging-Technik? 1 Beim Auftreten von logischen Fehlern. 2 JUnit fehlgeschlagen: Fehler werden nicht auf Anhieb gefunden! 3 JUnit erfolgreich: Trotzdem unerklärliches Fehlverhalten tritt auf! Wie funktioniert Debugging? Die Ausführung wird bei Fehler verursachende Stellen gestoppt. Die aktuellen Werte der Feld-und Lokalvariablen werden betrachtet. Anhand der aktuellen Werte der Variablen werden Fehler gefunden. Debugging benutzt Breakpoints um die Ausführung zu stoppen. Erreicht der Compiler einen Breakpoint, wird die Ausführung gestoppt. Debugging starten: Breakpoints setzen dann Debugging starten. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 5 / 37
Debugging Beispiel Debugging Beispiel 1 Ein Buggy Programm schreiben und ausführen Buggy Programm: ist ein Programm mit logischen Fehlern. Beispiel: Rekursive Methode mit einer falschen Abbruchbedingung. Programmiere eine rekursive Methode: berechnefakultaetvom(int x) Fakultät einer Zahl x ist x! = x*(x-1)*(x-2)*(x-3)*...* 1. Abbruchs- Bedinung: wenn x gleich 0 return 0 (falsche Bedinung!) Richtige Abbruchs-Bedingung wäre: wenn z gleich 0 oder 1 return 1. Programm für x=5 ausführen. Keine Fehler! Ergebnis =0 Das ist ein logischer Fehler! Denn Fakultaet von 5 ist 120. 2 Breakpoints setzen Doppelklick den Marker Bar links zum Code. ODER: verdächtigen Code markieren: Run Toggle Line Breakpoint 3 Debugging starten Run Debug As Java Application. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 6 / 37
Debugging Beispiel Buggy Programm Schreiben und ausführen L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 7 / 37
Debugging Beispiel Breakpoints setzen Doppelklick den Marker Bar links zum Code. ODER: verdächtigen Code markieren: Run Toggle Line Breakpoint. Ein Breakpoint erscheint im Marker Bar links zum Code. (Zeile 8) L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 8 / 37
Debugging Beispiel Debugging starten 1 Run Debug (F11) ODER Debug As Java Application. 2 ODER: Debugsymbol Dreieck Pfeil Debug As Java Application. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 9 / 37
Debug Perspectives Perspective Überblick Debug Perspective: Farbig dargestellt L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 10 / 37
Debug Perspectives Debug Perspective Überblick Perspective Überblick Debug Perspective ist eine Sammlung von Debugging Views Links oben: Debug View Rechts Oben: Überlappende Views(Variables, Breakpoints, Expressions) Mitte links: Debug Editor. Mitte rechts: Outline View. Ganz unten: Display View und die Console/Task Views. Debug Perspective startet automatisch, wenn man Debug startet Jedes View übernimmt eine nützliche Aufgabe für das Debugging. Bemerkungen über die Debug Views Debug, Variables, Breakpoints, Display&Editor sind Debug-spezifisch. Breakpoints und Display erscheinen beim Debugging nicht automatisch! Views zeigen: Windows Show Views Breakpoints/Display Outline, Console und Task Views sind genau wie bei Java Perspective. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 11 / 37
Debug Perspectives Debug View Debug View 1 Editor Bereich(links): enthält Einträgen zu dem debugging Programm 2 Resume Button: startet das Ausführen erneut an. 3 Suspend Button: hält die Ausführung(z.B. bei unendlichen Schleifen). 4 Terminate Button: stoppt das Debugging. 5 STEP Techniken: zum Springen zwischen den Codezeilen. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 12 / 37
Debug Perspectives Debug View Debug View: STEP Techniken 1 Step into F5: Springt zu der ausgewählten Anweisung Beim Methodenaufruf: springt zu der aufgerufenen Methode. 2 Step over F6: Springt über die ausgewählte Anweisung Beim Methodenaufruf: springt nicht zu der aufgerufenen Methode. 3 Step Return F7: Beim Methodenaufruf: Ausführung wird zu Ende gemacht. Spring zurück und stoppt. 4 Drop To Frame: Springt zu dem selektierten Stack in dem Editor Bereich. Funktioniert nicht beim top Frame und Native Methoden! 5 Use Step Filters: Wie sprint into, berücksichtigt aber Filter Konfigurationen. Konfiguration: Windows Preferences Java Debug STEP Filtering L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 13 / 37
Variables View Debug Perspectives Variables View Variables View ist im überlappenden View Fenster(rechts oben). listet alle lokalen Variablen und deren aktuellen Werte (Name, Value) Nützliche Funktionen vom Variables View Klickt man eine Variable, so erscheint ihr Wert auch im untern Fenster. Klickt man den Wert an, so kann man ihn editieren und ändern. Zum Testen: Value 5 anklicken, neuen Wert 7 eintragen. X=7 ist nur im Debug aktiv im originalen Quellcode bleibt x=5. Variables View erlaubt also das interaktive Basteln im Programm Struktur der Variablen zeigen: Show Logical Structure. Variablen im Variables View Fenster zuklappen: Collapse All. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 14 / 37
Breakpoints View Debug Perspectives Breakpoints View Breakpoints View ist im überlappenden View Fenster(rechts oben). listet alle Breakpoints: Klasse[line:nr] -methode. verwaltet die gesetzten Breakpoints in dem Code. Nützliche Funktionen vom Breakpoints View (Siehe nächste Folie!) Breakpoint in der Liste auswählen Rechter Mausklick Go To File: springt zu der Zeile, in der der Breakpoint ist. Suspend VM: stoppt die Java Virtual Machine Hit Count: wie oft soll die Anweisung wiederholt werden? Disable/Remove: deaktiviert/löscht den markierten Breakpoint Export Breakpoints: speichert den Code mit dem Breakpoint als.bkpt Import Breakpoints: lädt eine.bkpt Datei als Code mit Breakpoints. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 15 / 37
Debug Perspectives Breakpoints View Nützliche Funktionen vom Breakpoints View Breakpoint in der Liste auswählen Rechter Mausklick L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 16 / 37
Expressions View Debug Perspectives Expressions View Expressions View Window Show View Expressions erscheint im überlappenden View Fenster(rechts oben). Nützliche Funktionen vom Variables View (Siehe nächste Folie!) Ermöglicht das Einfügen und Teste von Ausdrücken. Einstellung: Rechter Mausklick auf dem Expressions View Fenster Rechter Mausklick Add Watch Expression: return x*3; Den Ausdruck x*3 wird bei jedem Durchlauf auch ausgewertet. Expressions kann man auch suchen, löschen, kopieren, auswerten. Dies ist nützlich zum Testen von Nebeneffekten. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 17 / 37
Debug Perspectives Expressions View Nützliche Funktionen vom Expressions View Expressions View Fenster Rechter Mausklick Add Watch Expression. Beispiel: return x*3; L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 18 / 37
Debug Perspectives Debug Editor View Debug Editor View Debug Editor View ist das Quellcode Fenster (mitte links) Debug Editor View zeigt den Code und wo der Compiler gerade ist. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 19 / 37
Debug Perspectives Debug Editor View Nütztliche Funktionen vom Debug Editor View Direkte Funktionen im Editor Fenster verwaltet den Quellcode in Debug Modus. Hot Replacement: Codeänderung wird in Java-Editor übernommen. Bewegt man den Maus über eine Variable, so wird ihr Wert angezeigt. Funktionen durch Rechter Mausklick im Editor Variable/Ausdruck markieren Rechter Mausklick Rechter Mausklick Watch: zur expressions Liste hinzufügen. Rechter Mausklick Inspect: öffnet ein Fenster(Variable=Wert). Rechter Mausklick Display: öffnet ein Fenster((Typ)Wert). L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 20 / 37
Debug Perspectives Debug Editor View Nütztliche Funktionen vom Debug Editor: Inspect Zielvariable x markieren: Rechter Mausklick Watch: fügt int x=5 zur expressions Liste. Inspect: öffnet ein Fenster(Variable=Wert) Also ( x =5). Display: öffnet ein Fenster((Typ)Wert) Also ((int)5) L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 21 / 37
Debug Perspectives Debug Editor View Nütztliche Funktionen vom Debug Editor: Beispiel: Inspect Zielvariable x markieren: Rechter Mausklick Inspect L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 22 / 37
Display View Debug Perspectives Display View Displays View Window Show View Display erscheint im untern View Fenster neben Console/Task View. Nützliche Funktionen vom Display View (Siehe nächste Folie!) Zeigt das Ergebnis der Evaluation eines Ausdruckes(Expression). Zeigt das Ergebnis in dem Kontext des aktuellen Stack Frame. Zeigt das Ergebnis in dem Display View direkt. Display View Fenster anklicken, den Ausdruck eintippen. Ausdruck markieren Rechter Mausklick Excute Excute: wertet den Ausdruck aus. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 23 / 37
Debug Perspectives Display View Nützliche Funktionen vom Display View Display View Fenster anklicken: System.out.println(x) eintippen. System.out.println(x) markieren Rechter Mausklick Excute Der Wert von x wird ausgewertet und ausgegeben. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 24 / 37
Wichtige Techniken Debugging Techniken Wichtige Techniken Die wichtigsten Debugging Techniken: Stepping durch den Code 1 SINGLE STEPPING mit den 5 Stepping Methoden. 2 RESUMING EXCUTION bis zum nächsten Breakpoint. 3 BREAKPOINT KONFIGURATION: (Breakpoint Hit, Bedingungen) Hilfreiche Tips und Techniken, um die Fehler zu verstehen/testen 1 JUnit-Fehlermeldung lassen vermuten, wo man Breakpoints setzen soll. 2 Soll/Ist Vergleich lassen vermuten, wo man Breakpoints setzen soll. 3 5! soll 120, ist 0. Breakpoint: return x*berechnefakultaetvom(x-1). 4 In Variables View: Werte der Variablen ändern, Programm testen. 5 Im Debug-Editor: Code dort anpassen/ändern, Programm testen. 6 In Expressions View: Expressions evaluairen. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 25 / 37
Debugging Techniken Technik 1: Single Stepping Debugging Technik 1: SINGLE STEPPING (5 Methoden) SINGLE STEPPING hat 5 Stepping Methoden (im Debug View) 1 (Step into F5): Springt zu der nächsten Anweisung. 2 (Step over F6): Springt über die nächste Anweisung. 3 (Step Return F7):führt Methode aus und springt zurück. 4 (Drop To Frame): Springt zu dem selektierten Stack im Editor. 5 (Use Step Filters): berücksichtigt Filter Konfigurationen. Stepping Methoden versuchen Schrittweise den Fehler zu finden Stepping Methoden sind sehr langsam und mühsam Stepping Methoden sind sehr genau und gründlich Step Into, Step Over und Step Return werden häuftig verwendet. Use Step Filters wird zur Verfeinerung mit Filter benutzt. Filter: Windows Preferences Java Debug STEP Filtering Drop To Frame: bestimmte Schritt(e) zurück kehren. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 26 / 37
Debugging Techniken Technik 1: Single Stepping STEPPING Methode 1: Step into (F5) Step into (F5): Arbeitsweise 1 Springt zur nächsten -ausgewählten- Anweisung. 2 Bei Methodenaufruf-Anweisung wird rein in die Methode gesprungen. 3 Die erste Anweisung der aufgerufenen Methode wird ausgeführt. 4 Nächste Step-Into springt zur nächsten Zeile in der Methode, usw. 5 Ist die Methode zu Ende, springt die Ausführung zur } 6 Alle lokalen Variablen der Methode erscheinen in Variables-View. 7 Nächste Step-Into springt zur Anweisung nach dem Methodenaufruf. Step into (F5): Vorteile 1 Alle -aufgerufenen- Methoden werden gründlich untersucht! 2 Step Into hilfreich, wenn man alles sehr gründlich untersuchen will. Step into (F5): Nachteile 1 Sehr aufwendig, da die Ausführung Zeile für Zeile läuft/stoppt. 2 Bei bereits erfolgreichen getesteten Methoden macht dies wenig Sinn! L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 27 / 37
Debugging Techniken Technik 1: Single Stepping STEPPING-Technik anhand eines Testprogrammes Schreibe ein Testprogramm(Punkt.java) mit einem Breakpoint(Zeile 18) L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 28 / 37
Debugging Techniken Technik 1: Single Stepping Debugging vom Testprogramm (Punkt.java) Starten Punkt.java Debug starten: F11 anklicken. 1 Konstruktur wird aufgerufen und Feldvariablen automatisch initialisiert. 2 Im Variables View: this anklicken: x=10, y=20, z=0 (Feldvariablen) 3 Die Ausführung stoppt bei dem Breakpoint ohne sie auszuführen. 4 Also t1 in Zeile 18 ist im Variables View noch nicht zu sehen! L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 29 / 37
Debugging Techniken Technik 1: Single Stepping STEPPING METHODE 1: Step Into (F5) Step Into oder F5 beim ersten Mal anklicken 1 Breakpoint Anweisung wird ausgewertet (Zeile 18: int t1=5) 2 Die neue lokale Variable erscheinen im Variables View (t1=5) 3 Die Ausführung springt zur nächsten Anweisung Zeile 19 und stoppt. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 30 / 37
Debugging Techniken Technik 1: Single Stepping Step Into (F5) bei Methodenaufruf-Anweisungen Step Into bei einer Methodenaufruf-Anweisung anklicken Bei Methodenaufruf-Anweisung wird rein in die Methode gesprungen. Die Ausführung springt zur ersten Anweisung der aufgerufenen Methode. Also die Ausführung springt zur Zeile 15 (z=x+y) der Methode add(). Die lokale Variable t1 verschwindet temporär aus dem Variables View. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 31 / 37
Debugging Techniken Technik 1: Single Stepping Step Into (F5) innerhalb der aufgerufenen Methode Step Into innerhalb der aufgerufenen Methode Nächste Step-Into springt zur nächsten Zeile in der Methode, usw. Ist die Methode zu Ende, springt die Ausführung zur } Das Ergebnis der Methodenausführung wird möglicherweise sichtbar. Im Variables View: bekommt z jetzt den neuen Wert 30 Alle lokalen Variablen der Methode erscheinen in Variables-View. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 32 / 37
Debugging Techniken Technik 2: Resuming Execution Debugging Technik 2: Resuming Exectuion bis Breakpoint Set up die Debug Perspective: varialbe markieren Rechter Mausklick Watch (Dies addiert die Vairablewert zu dem Expression View) Resume Button anklicken: Code wird bis zum nächsten Breakpoint ausgeführt und dort gestoppt. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 33 / 37
Debugging Techniken Technik 3: Breakpoints konfigurieren Debugging Technik 3: Setting Breakpoint Hit Counts Macht Sinn bei einem Code, der n mal hinter einander aufgerufen wird. Z.B. bei Schleifen, Iterationen, rekursive Methoden Ein Breakpoint in dem Breakpoint View auswählen Rechter Mausklick Properties Enable Hit Count aktivieren die Zahn n eingeben. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 34 / 37
Debugging Techniken Technik 3: Breakpoints konfigurieren Debugging Technik 4: Breakpoint Konfigurieren Rechter Mausklick auf ein Breakpoint Properties Condition hinzufügen (Enable Condition checkbox aktivieren) condition is true: z.b value=0 value of a condition change: z.b. ipadress Multithreaded Debugging Watchpoints: Feldvariable markieren: run Toggle Watchpoint Method Breakpoint: Methodenaufruf markieren: run Toggle Method Breakpoint. Dies macht Sinn beim Aufruf von Methoden, deren Sourccode nicht vorliegt. Z.B. aus JAR Files. Exception Breakpoint. stoppt das Programm, wenn Exceptions eintreten: run Toggle Exception. Dann erscheint eine Liste von möglichen Exception. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 35 / 37
Debugging Techniken Technik 3: Breakpoints konfigurieren Debugging Technik 5: Evaluating Expressions, Edit values Neu Expression hinzufügen: Expressions View Editor rechter Mausklick run Add Watch Expression Variablenwert änderen: Variable View value Wert anklicken ändern. L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 36 / 37
Debugging Techniken Technik 3: Breakpoints konfigurieren Debugging Technik 6: Using Hot Code Replacement Hot Code Replacement (ab JRE 1.4+) = In JDT Debugging Editor den Wert einer Variable ändern. Project Build Automatically aktivieren. Editiere eine Variable ändere ihren Wert Sepcihern Resume execution L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 37 / 37