Användning av debuggern

OBS: På vissa DrJava-installationer finns inte debuggern med. Hoppa i så fall över denna minilektion

Förberedelser

1. Skapa en katalog för laborationen

2. Starta DrJava.

Om du inte ser radnumren ute i vänstra kanten: bild
Gå in i inställningarna för DrJava genom att

välja Preferences i Edit-menyn,

bild

bocka för Show All Line Numbers och

trycka på OK

bild
3. Gör i DrJava och kopiera följande klass till definitionsrutan:
public class TestTurtle { public static void main ( String[] arg ) { World w = new World(); Turtle t = new Turtle(w); for (int i=1; i < =5; i++) { t.move(30); t.turn(20); } } }

4. Kompilera och testkör

Debuggern

I DrJava-miljön finns en så kallad debugger som hjälper programmeraren att hitta fel. Så här kan man använda den:

Klicka på Debugger i huvudmenyn. bild


Sätt höger musknapp på rad 5 i programmet dvs på satsen
Turtle t = new Turtle(w);
och välj Toggle Breakpoint.
bild


Resultatet blir att satsen markeras med rött. Du har nu satt en brytpunkt i programmet. Programmet kommer alltid stanna upp där när du kör i Debug Mode bild


Klicka på Run. Programmet kommer att köras till och med
  World w = new World();
och denna sats markeras med blå färg. En värld dyker upp och programmet stannar vid rad 5, vilket också loggas i Interaktionsrutan.
bild


Programmet kan köras vidare på olika sätt.
Prova Step Over.
bild


Programmet kommer att utföra nästa sats i main.
En padda dyker upp i världen.
Programmet stannar vid rad 6.
bild


Fortsätt med Step Over. Programmet har kommit in i loopen och väntar på att utföra första satsen. Den blåmarkerade raden har alltså ännu inte utförts. bild


Så här ser det samtidigt ut i interaktionsrutan: bild


I interaktionsrutan kan man får variabelvärden utskrivna. Vid rad 7 där programmet just har tagit en paus existerar tre variabler: w, t och i.
Skriv variabelns namn följt av Enter/Return så blir värdet utskrivet.
Kontrollera värdena på i och t.
bild


Fortsätt med Step Over tills programmet är färdigt.

Studera vad som sker i

Kör programmet med samma brytpunkter som tidigare och se till att programmet stannar vid rad 5. Nu skall vi studera Watches.
Klicka på de små pilarna vid Stack om du inte ser Watches.
bild


Skriv in variablerna t och i i var sin ruta.
Java säger <not found> eftersom programmet ännu inte
utfört de satser där de deklareras.
bild


Kör nu med Step Over några gånger tills loopen gått två varv.
Då bör det se ut så här:

bild

Tips: Frigör debuggerfönstret

Det blir ofta trångt i DrJavas fönster. Då kan man frigöra debuggerfönstret genom att bocka för Detach Debugger i Debugger-menyn. Prova det!

Automatisk spårning i debuggern


Skapa klassen RollDie: public class RollDie { public static void main(String[] arg) { int t=(int) (6*Math.random() + 1); int n=1; while (t != 6) { t = (int) (6*Math.random() + 1); n++; } System.out.println("Antal kast = " + n); } }

Kompilera den och kör den utan Debug.

Vad gör programmet?

  • Aktivera debug mode

  • Sätt brytpunkt på första satsen i main!

  • Aktivera watches på n och t!

  • Kör programmet. Programmet stannar nu vid första satsen.

  • Kör programmet vidare med Automatic Trace!
bild

Studera vad som händer i definitions-, watches- och interaktionsrutan.

Klicka på Disable Trace för att avsluta spårningen.

Övning med debuggern

Nedanstående program skall enligt uppgift minsta värde och medelvärde av ett antal tal. Testkörning med de fyra talen 1, 2, 3 och -1 visar dock att programmet inte fungerar.

Använd nu debuggern för att ta reda på varför programmet inte fungerar. Rätta felen!

När ni kör programmet i Debug Mode så måste du mata in värden i interaktionsrutan när programmet kommit till en inläsningssats för att programmet skall gå vidare.

Så här ser programmet ut:

import java.util.*; public class MinMedel { public static void main (String[] arg) { Scanner scan = new Scanner(System.in); System.out.println("Läs in positiva tal"); System.out.println("Avsluta inläsningen med ett negativt tal"); int min = 0; int tal = 0; int n = 1; double sum = 0.0; while (tal >= 0) { System.out.print("Ge tal " + n + ":"); tal = scan.nextInt(); sum = sum + tal; if (min < tal) { min = tal; } n++; } System.out.println("min : " + min); System.out.println("medel: " + sum/n); } }

Tillbaka

Valid CSS!