Sie sind auf Seite 1von 37

Einheit 06: Debugging in Eclipse

L.Raed
Ludwig-Maximilians-Universitt Mnchen a u Institut fr Informatik u 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 Einfhrung u Beispiel Debug Perspectives Perspective Uberblick Debug View Variables View Breakpoints View Expressions View Debug Editor View Display View Debugging Techniken Wichtige Techniken Technik 1: Single Stepping Technik 2: Resuming Execution Technik 3: Breakpoints kongurieren
L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 2 / 37

Debugging

Motivation und Einfhrung u

Motivation
Testen mit JUnit
JUnit testet lediglich die Erfllung von einer Menge von Tests. u 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 fr groe Programme verliert man schnell den Uberblick! u

Fehlersuche mit Debugging Tools


Debugging Tools zeigen die Werte der Variablen ordentlich in Tabellen. Debugging Tools untersttzen die Suche nach der Fehlerursache. u Bei schwer zu ndenden Fehlern sind Debugging-Tools fast ein MUSS.

L.Raed (LMU/PST)

Einheit 06: Debugging in Eclipse

January 22, 2010

3 / 37

Debugging

Motivation und Einfhrung u

Einfhrung in Debugging u

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 Erfllung von einer Menge von Tests. u JUnit erkennt oft aber nicht die Ursache der (logischen) Fehler. Debugging kann dagegen nach der Ursache der logischen Fehler suchen.

Eclipse verfgt uber ein eigenes Debugging-Tool u


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 Einfhrung u

Wann und wie wird Debugging eingesetzt?

Wann benutzen wir die Debugging-Technik?


1 2 3

Beim Auftreten von logischen Fehlern. JUnit fehlgeschlagen: Fehler werden nicht auf Anhieb gefunden! JUnit erfolgreich: Trotzdem unerklrliches Fehlverhalten tritt auf! a Die Ausfhrung wird bei Fehler verursachende Stellen gestoppt. u Die aktuellen Werte der Feld-und Lokalvariablen werden betrachtet. Anhand der aktuellen Werte der Variablen werden Fehler gefunden. Debugging benutzt Breakpoints um die Ausfhrung zu stoppen. u Erreicht der Compiler einen Breakpoint, wird die Ausfhrung gestoppt. u Debugging starten: Breakpoints setzen dann Debugging starten.

Wie funktioniert Debugging?

L.Raed (LMU/PST)

Einheit 06: Debugging in Eclipse

January 22, 2010

5 / 37

Debugging

Beispiel

Debugging Beispiel
1

Ein Buggy Programm schreiben und ausfhren u


Buggy Programm: ist ein Programm mit logischen Fehlern. Beispiel: Rekursive Methode mit einer falschen Abbruchbedingung. Programmiere eine rekursive Methode: berechneFakultaetVom(int x) Fakultt einer Zahl x ist x! = x*(x-1)*(x-2)*(x-3)*....* 1. a Abbruchs- Bedinung: wenn x gleich 0 return 0 (falsche Bedinung!) Richtige Abbruchs-Bedingung wre: wenn z gleich 0 oder 1 return 1. a Programm fr x=5 ausfhren. Keine Fehler! Ergebnis =0 u u Das ist ein logischer Fehler! Denn Fakultaet von 5 ist 120.

Breakpoints setzen
Doppelklick den Marker Bar links zum Code. ODER: verdchtigen Code markieren: Run Toggle Line Breakpoint a

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 ausfhren u

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: verdchtigen Code markieren: Run Toggle Line Breakpoint. a 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 2

Run Debug (F11) ODER Debug As Java Application . 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 Uberblick

Debug Perspective: Farbig dargestellt

L.Raed (LMU/PST)

Einheit 06: Debugging in Eclipse

January 22, 2010

10 / 37

Debug Perspectives

Perspective Uberblick

Debug Perspective Uberblick


Debug Perspective ist eine Sammlung von Debugging Views
Links oben: Debug View Rechts Oben: Uberlappende 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 ubernimmt eine ntzliche Aufgabe fr das Debugging. u u

Bemerkungen uber die Debug Views


Debug, Variables, Breakpoints, Display&Editor sind Debug-spezisch. 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 2 3 4 5

Editor Bereich(links): enthlt Eintrgen zu dem debugging Programm a a Resume Button: startet das Ausfhren erneut an. u Suspend Button: hlt die Ausfhrung(z.B. bei unendlichen Schleifen). a u Terminate Button: stoppt das Debugging. 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 ausgewhlten Anweisung a Beim Methodenaufruf: springt zu der aufgerufenen Methode.

Step over F6:


Springt uber die ausgewhlte Anweisung a Beim Methodenaufruf: springt nicht zu der aufgerufenen Methode.

Step Return F7:


Beim Methodenaufruf: Ausfhrung wird zu Ende gemacht. u Spring zurck und stoppt. u

Drop To Frame:
Springt zu dem selektierten Stack in dem Editor Bereich. Funktioniert nicht beim top Frame und Native Methoden!

Use Step Filters:


Wie sprint into, bercksichtigt aber Filter Kongurationen. u Konguration: WindowsPreferencesJavaDebugSTEP Filtering
L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 13 / 37

Debug Perspectives

Variables View

Variables View

Variables View
ist im uberlappenden View Fenster(rechts oben). listet alle lokalen Variablen und deren aktuellen Werte (Name, Value)

Ntzliche Funktionen vom Variables View u


Klickt man eine Variable, so erscheint ihr Wert auch im untern Fenster. Klickt man den Wert an, so kann man ihn editieren und ndern. a 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

Debug Perspectives

Breakpoints View

Breakpoints View

Breakpoints View
ist im uberlappenden View Fenster(rechts oben). listet alle Breakpoints: Klasse[line:nr] -methode. verwaltet die gesetzten Breakpoints in dem Code.

Ntzliche Funktionen vom Breakpoints View (Siehe nchste Folie!) u a


Breakpoint in der Liste auswhlen Rechter Mausklick a 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/lscht den markierten Breakpoint o Export Breakpoints: speichert den Code mit dem Breakpoint als .bkpt Import Breakpoints: ldt eine .bkpt Datei als Code mit Breakpoints. a
L.Raed (LMU/PST) Einheit 06: Debugging in Eclipse January 22, 2010 15 / 37

Debug Perspectives

Breakpoints View

Ntzliche Funktionen vom Breakpoints View u

Breakpoint in der Liste auswhlen Rechter Mausklick a

L.Raed (LMU/PST)

Einheit 06: Debugging in Eclipse

January 22, 2010

16 / 37

Debug Perspectives

Expressions View

Expressions View

Expressions View
WindowShow ViewExpressions erscheint im uberlappenden View Fenster(rechts oben).

Ntzliche Funktionen vom Variables View (Siehe nchste Folie!) u a


Ermglicht das Einfgen und Teste von Ausdrcken. o u u 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, lschen, kopieren, auswerten. o Dies ist ntzlich zum Testen von Nebeneekten. u

L.Raed (LMU/PST)

Einheit 06: Debugging in Eclipse

January 22, 2010

17 / 37

Debug Perspectives

Expressions View

Ntzliche Funktionen vom Expressions View u


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

Ntztliche Funktionen vom Debug Editor View u

Direkte Funktionen im Editor Fenster


verwaltet den Quellcode in Debug Modus. Hot Replacement: Codenderung wird in Java-Editor ubernommen. a Bewegt man den Maus uber eine Variable, so wird ihr Wert angezeigt.

Funktionen durch Rechter Mausklick im Editor


Variable/Ausdruck markierenRechter Mausklick Rechter MausklickWatch: zur expressions Liste hinzufgen. u Rechter MausklickInspect: net ein Fenster(Variable=Wert). o Rechter MausklickDisplay: net ein Fenster((Typ)Wert). o

L.Raed (LMU/PST)

Einheit 06: Debugging in Eclipse

January 22, 2010

20 / 37

Debug Perspectives

Debug Editor View

Ntztliche Funktionen vom Debug Editor: Inspect u


Zielvariable x markieren: Rechter Mausklick
Watch: fgt int x=5 zur expressions Liste. u Inspect: net ein Fenster(Variable=Wert) Also (x=5). o Display: net ein Fenster((Typ)Wert) Also ((int)5) o

L.Raed (LMU/PST)

Einheit 06: Debugging in Eclipse

January 22, 2010

21 / 37

Debug Perspectives

Debug Editor View

Ntztliche Funktionen vom Debug Editor: Beispiel: Inspect u

Zielvariable x markieren: Rechter MausklickInspect

L.Raed (LMU/PST)

Einheit 06: Debugging in Eclipse

January 22, 2010

22 / 37

Debug Perspectives

Display View

Display View

Displays View
Window Show View Display erscheint im untern View Fenster neben Console/Task View.

Ntzliche Funktionen vom Display View (Siehe nchste Folie!) u a


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

Ntzliche Funktionen vom Display View u


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

Debugging Techniken

Wichtige Techniken

Wichtige Techniken

Die wichtigsten Debugging Techniken: Stepping durch den Code


1 2 3

SINGLE STEPPING mit den 5 Stepping Methoden. RESUMING EXCUTION bis zum nchsten Breakpoint. a BREAKPOINT KONFIGURATION: (Breakpoint Hit, Bedingungen) JUnit-Fehlermeldung lassen vermuten, wo man Breakpoints setzen soll. Soll/Ist Vergleich lassen vermuten, wo man Breakpoints setzen soll. 5! soll 120, ist 0. Breakpoint: return x*berechneFakultaetVom(x-1). In Variables View: Werte der Variablen ndern, Programm testen. a Im Debug-Editor: Code dort anpassen/ndern, Programm testen. a In Expressions View: Expressions evaluairen.

Hilfreiche Tips und Techniken, um die Fehler zu verstehen/testen


1 2 3 4 5 6

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 2 3 4 5

(Step into F5): Springt zu der nchsten Anweisung. a (Step over F6): Springt uber die nchste Anweisung. a (Step Return F7):fhrt Methode aus und springt zurck. u u (Drop To Frame): Springt zu dem selektierten Stack im Editor. (Use Step Filters): bercksichtigt Filter Kongurationen. u Stepping Methoden sind sehr langsam und mhsam u Stepping Methoden sind sehr genau und grndlich u Step Into, Step Over und Step Return werden huftig verwendet. a Use Step Filters wird zur Verfeinerung mit Filter benutzt. Filter: WindowsPreferencesJavaDebugSTEP Filtering Drop To Frame: bestimmte Schritt(e) zurck kehren. u

Stepping Methoden versuchen Schrittweise den Fehler zu nden

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 2 3 4 5 6 7

Springt zur nchsten -ausgewhlten- Anweisung. a a Bei Methodenaufruf-Anweisung wird rein in die Methode gesprungen. Die erste Anweisung der aufgerufenen Methode wird ausgefhrt. u Nchste Step-Into springt zur nchsten Zeile in der Methode, usw. a a Ist die Methode zu Ende, springt die Ausfhrung zur } u Alle lokalen Variablen der Methode erscheinen in Variables-View. Nchste Step-Into springt zur Anweisung nach dem Methodenaufruf. a

Step into (F5): Vorteile


1 2

Alle -aufgerufenen- Methoden werden grndlich untersucht! u Step Into hilfreich, wenn man alles sehr grndlich untersuchen will. u

Step into (F5): Nachteile


1 2

Sehr aufwendig, da die Ausfhrung Zeile fr Zeile luft/stoppt. u u a Bei bereits erfolgreichen getesteten Methoden macht dies wenig Sinn!
Einheit 06: Debugging in Eclipse January 22, 2010 27 / 37

L.Raed (LMU/PST)

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 2 3 4

Konstruktur wird aufgerufen und Feldvariablen automatisch initialisiert. Im Variables View: this anklicken: x=10, y=20, z=0 (Feldvariablen) Die Ausfhrung stoppt bei dem Breakpoint ohne sie auszufhren. u u 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 2 3

Breakpoint Anweisung wird ausgewertet (Zeile 18: int t1=5) Die neue lokale Variable erscheinen im Variables View (t1=5) Die Ausfhrung springt zur nchsten Anweisung Zeile 19 und stoppt. u a

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 Ausfhrung springt zur ersten Anweisung der aufgerufenen u Methode. Also die Ausfhrung springt zur Zeile 15 (z=x+y) der Methode add(). u Die lokale Variable t1 verschwindet temporr aus dem Variables View. a

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
Nchste Step-Into springt zur nchsten Zeile in der Methode, usw. a a Ist die Methode zu Ende, springt die Ausfhrung zur } u Das Ergebnis der Methodenausfhrung wird mglicherweise sichtbar. u o 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 nchsten Breakpoint a ausgefhrt und dort gestoppt. u

L.Raed (LMU/PST)

Einheit 06: Debugging in Eclipse

January 22, 2010

33 / 37

Debugging Techniken

Technik 3: Breakpoints kongurieren

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 auswhlen Rechter a 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 kongurieren

Debugging Technik 4: Breakpoint Kongurieren


Rechter Mausklick auf ein Breakpoint Properties Condition hinzufgen (Enable Condition checkbox aktivieren) u
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 mglichen Exception. o

L.Raed (LMU/PST)

Einheit 06: Debugging in Eclipse

January 22, 2010

35 / 37

Debugging Techniken

Technik 3: Breakpoints kongurieren

Debugging Technik 5: Evaluating Expressions, Edit values

Neu Expression hinzufgen: Expressions View Editor rechter u Mausklick run Add Watch Expression Variablenwert nderen: Variable View value Wert anklicken a ndern. a

L.Raed (LMU/PST)

Einheit 06: Debugging in Eclipse

January 22, 2010

36 / 37

Debugging Techniken

Technik 3: Breakpoints kongurieren

Debugging Technik 6: Using Hot Code Replacement

Hot Code Replacement (ab JRE 1.4+) = In JDT Debugging Editor den Wert einer Variable ndern. a Project Build Automatically aktivieren. Editiere eine Variable ndere ihren Wert Sepcihern Resume a execution

L.Raed (LMU/PST)

Einheit 06: Debugging in Eclipse

January 22, 2010

37 / 37