Användning av debuggern
OBS: På vissa DrJava-installationer finns inte debuggern med. Hoppa i så fall över denna minilektionFörberedelser
1. Skapa en katalog för laborationen2. Starta DrJava.
Om du inte ser radnumren ute i vänstra kanten: |
![]() |
Gå in i inställningarna för DrJava genom att
välja Preferences i Edit-menyn, |
![]()
|
bocka för Show All Line Numbers och
trycka på |
![]() |
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. |
![]() |
Sätt höger musknapp på rad 5 i programmet
dvs på satsenTurtle t = new Turtle(w);
och välj Toggle Breakpoint. |
![]() |
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 |
![]() |
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. |
![]() |
Programmet kan köras vidare på olika sätt. Prova Step Over. |
![]() |
Programmet kommer att utföra nästa sats i main .En padda dyker upp i världen. Programmet stannar vid rad 6. |
![]() |
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. |
![]() |
Så här ser det samtidigt ut i interaktionsrutan: |
![]() |
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 .
|
![]() |
Fortsätt med Step Over tills programmet är färdigt.
Studera vad som sker i
- definitionsrutan,
- interaktionsrutan och
- fönstret med paddan!
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. |
![]() |
Skriv in variablerna t och i i
var sin ruta. Java säger <not found> eftersom programmet ännu inteutfört de satser där de deklareras. |
![]() |
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: |
|
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?
|
![]() |
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);
}
}
- En alternativ beskrivning av debugging med variabelbevakning finns här.
- En alternativ beskrivning av debugging med "Step Into" in i metoder finns här.