Příloha B: Ladění kódu (Debugging)

Psaní kódu je jako psaní detektivky. Někdy se v příběhu objeví díra a vy musíte zjistit, kde se stala chyba. Tomuto procesu se říká ladění (debugging). V Prologu je to obzvlášť důležité, protože jeho "myšlení" (backtracking) může být někdy matoucí.

Nástroj č. 1: Trace – Sledování stop

trace je jako nasadit na Prolog sledovací zařízení. Uvidíte každý jeho krok, každé rozhodnutí. Je to nejdůkladnější, ale také nejukecanější nástroj.

  1. V konzoli napište trace. a stiskněte Enter.
  2. Spusťte svůj dotaz (např. ?- rodic(homer, X).).
  3. Prolog se zastaví na začátku a čeká na vaše pokyny.

Když vidíte otazník ?, můžete zadat příkaz:

Pro vypnutí napište notrace. nebo nodebug.

Nástroj č. 2: Write – Vypisování zpráv

Někdy je trace příliš detailní. Chcete jen vědět, jestli se program dostal do určitého bodu a jakou hodnotu má proměnná. K tomu slouží starý dobrý write.

moje_pravidlo(X, Y) :-
    write('Vstupuji do pravidla s X = '), write(X), nl,
    ... nějaká logika ...
    write('Opouštím pravidlo s Y = '), write(Y), nl.

Je to jako volat kamarádovi z různých míst v bludišti a říkat mu, kde právě jste.

Jak na to v praxi?

Programátoři často kombinují obě techniky:

  1. Hypotéza: "Myslím, že chyba je v pravidle vypocet/2."
  2. Izolace: Zkusíte zavolat jen toto pravidlo s testovacími daty. ?- vypocet(5, X).
  3. Sledování: Pokud to stále nefunguje, přidáte do pravidla pár write příkazů, abyste viděli hodnoty proměnných v klíčových bodech.
  4. Hloubková analýza: Pokud ani to nepomůže, zapnete trace a sledujete každý krok.

Grafický debugger (Gtrace)

Pokud používáte SWI-Prolog na Windows nebo Linuxu, můžete zkusit příkaz gtrace. Místo textu se otevře okno, kde vidíte kód a aktuální pozici barevně zvýrazněnou. Je to mnohem přehlednější než textový trace.