Ladění kódu (debugging)
Proč to potřebuji?
Ladění je klíčová dovednost pro hledání a opravu chyb v programu. Debugger umožňuje krokovat kód a sledovat hodnoty proměnných, čímž výrazně urychluje nalezení příčiny problému.
Teorie
Typy chyb: syntaktické (kompilér je odhalí), běhové/runtime (výjimky za běhu), logické (program běží, ale dává špatné výsledky – nejtěžší na odhalení).
Debugger je nástroj integrovaný v IDE (IntelliJ, Eclipse), který umožňuje krokovat kód řádek po řádku, sledovat hodnoty proměnných a hledat chyby.
Breakpoint = bod zastavení – program se zastaví na označeném řádku a programátor může prozkoumat stav.
Postup ladění
- Reprodukovat chybu – najít vstup, který chybu vyvolá
- Umístit breakpoint – na podezřelé místo v kódu
- Spustit v debug režimu – F5 / Debug tlačítko
- Krokovat:
- Step Over (F8) – provede celý řádek
- Step Into (F7) – vstoupí do volané metody
- Step Out – dokončí aktuální metodu
- Sledovat proměnné – okno Variables / Watches
- Opravit a ověřit
Příklady
// Chyba: průměr se počítá špatně
public class PrumerKalkulator {
public static double vypocitejPrumer(int[] cisla) {
int suma = 0;
for (int i = 0; i <= cisla.length; i++) { // BUG: <= místo <
suma += cisla[i]; // ArrayIndexOutOfBoundsException
}
return suma / cisla.length; // BUG: celočíselné dělení!
}
// Opravená verze:
public static double vypocitejPrumerSpravne(int[] cisla) {
if (cisla.length == 0) return 0;
int suma = 0;
for (int i = 0; i < cisla.length; i++) { // oprava: <
suma += cisla[i];
}
return (double) suma / cisla.length; // oprava: přetypování
}
}
// Postup v debuggeru:
// 1. Breakpoint na řádek "for (int i = 0; ...)"
// 2. Sledovat hodnoty: i, suma, cisla.length
// 3. Step Over – pozorovat jak se i mění
// 4. Odhalit, že i dosáhne cisla.length (mimo pole)
Shrnutí
Klíčové body
- Syntaktické chyby → kompilér, Runtime → výjimky, Logické → debugger
- Breakpoint = místo zastavení, krokování = Step Over/Into/Out
- Watches umožňují sledovat hodnoty výrazů za běhu
- Conditional breakpoint = zastaví se jen při splnění podmínky