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í

  1. Reprodukovat chybu – najít vstup, který chybu vyvolá
  2. Umístit breakpoint – na podezřelé místo v kódu
  3. Spustit v debug režimu – F5 / Debug tlačítko
  4. Krokovat:
    • Step Over (F8) – provede celý řádek
    • Step Into (F7) – vstoupí do volané metody
    • Step Out – dokončí aktuální metodu
  5. Sledovat proměnné – okno Variables / Watches
  6. 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