Tips hur man felsöker kod
Man brukar skilja mellan olika sorters fel: kompileringsfel och logi
ska fel. För att få bort dom måste man debugga (avlusa) programmet
så gott det går. Tänk på att indentera ordentligt, koden blir mycket lättare att felsöka och läsa då!
Kompileringsfel
Dessa lär man sig eftersom att tyda och rätta till. Ibland kan det dock vara svårt att hitta den sats i programmet som genererar felet.
- I BlueJ: kompilatorn markerar felen ett och ett och skriver ut en förklaring nederst i fönstret. En knapp med ett frågetecken dyker upp. Klicka på den så får du veta lite mer om felet. Kom ihåg att det ibland är satsen på raden före som är fel.
I emacs: kompilatorn skriver ofta ut vilket radnummer i koden som orsakar felet: Men ibland är det satsen på raden före som är fel.
- Om du ej förstår vilken/vilka satser som orsakar felet: Kommentera bort mer eller mindre delar av koden för att spåra felet.:
/*
sats;
sats;
...
*/
Kompilera om igen. Om kompileringsfelet försvann så betyder det att felet finns bland de bortkommenterade satserna.
- Skriv ej hela programmet och sedan kompilera allt - detta generar ofta en massa kompileringsfel. Skriv en klass med en metod - kompilera sedan. Bygg på klassen, kompilera igen, etc.
- Felet
nullPointerException
brukar betyda att man försöker använda ett objekt utan att ha skapat det. Det finns kanske en array som har en plats som kan peka på ett objekt, men där står det null
.
Några exempel på felmeddelanden:
- Om jag exempelvis glömmer att initiera n till något värde innan jag försökeranvända den får jag kompileringsfelet:
variable n might not have been initialized
- Om jag glömmer ett semikolon markeras raden efter felet och jag får med
delandet
';' expected
- Om jag försöker använd variabeln a utan att ha inte deklarerat den först får jag meddelandet:
cannot find symbot - variable a
Logiska fel
Programmet fungerar ej, men innehåller inga kompileringsfel. Det blir fel resultat eller programmet avbryts när det körs. Detta är de mest svårfunna felen.
- Manuell simulering av programkörningen
Försök följa programmet sats för sats på papper manuellt genom att läsa koden.
- Testa med olika indata till programmet
Detta kan ge vägledning om var felet kan finnas.
- Skriv ut variablernas värden
Detta är ett bra sätt eftersom det avslöjar vad som verkligen beräknas i programmet. Det ger vägledning om huruvida variablerna har korrekt värde (som du tror) för att programmet skall fungera. Skriv gärna ut värdet av instansvariabler, lokala variabler och parametrar som är kritiska för programmets funktion.
- Inspect i BlueJ
Detta är det bästa sättet. I BlueJ finns det goda möjligheter för uttestning och sökning efter fel genom att köra och testa respektive metod för sig (interaktivt). Med Inspect kan man synliggöra alla instansvariabler för ett skapat objekt utan att lägga in explicita utskriftssatser i koden. Dessutom kan man för en metod som returnerar ett värde genast se vilket värde som returneras när metoden körs. Med debuggern kan man köra programmet på lite olika sätt.
Exempel:
- Stega sig igenom programmet, dvs köra programmet sats för sats.
- Löpande få veta variablernas värden
- Få reda på vilka metoder och satser i dessa metoder som utförs.
- Sätta s.k. brytpunkter vid specifika satser i programmet. Dessa används för att styra programkörningen i debuggern. Vi körningen stannar alltid programmet vid en brytpunkt. För att köra vidare måste man explicit tala om detta. Exvis om en brytpunkt är satt vid en sats i en loop kommer programmet att i varje varv i loopen stanna vid denna sats.
Anna Eckerdal
Last modified: Fri Oct 20 09:44:59 MEST 2006