Log inRegister

Hibakeresés (Debugging)

Van kisebb testvéred? Ha nincs, akkor csak tegyünk úgy mintha Fred az lenne, aki épp elég idős ahhoz hogy tudjon járni.

Képzeld el, hogy anyukád azt mondja neki, menjen a fürdőszobába. Szóval a tesód elmegy a fürdőszobába, vár egy kicsit, aztán megkérdezi, miért is kellett neki ide jönnie. Vagy képzeld el, hogy van egy cserepes virág a házban, és mikor a szüleid hazajönnek, ott találják a tesódat a cserépből kiszedett földben, amint épp játszik benne. Összetakarítanak utána, aztán alaposan elmagyarázzák neki, hogy nem szabad ilyen piszkot csinálni, és összekenni magát. Így aztán a tesód valami jobbat talál, leszedi az összes levelet a virágról, és azokkal játszik.

A számítógépek pont ilyenek. Nem értik meg azt amit gondolsz -- csak abból értenek, amit leírsz nekik. Ha 'majdnem' pontosan írod le neki, mire gondolsz, akkor ő 'majdnem' pontosan azt fogja tenni, amit te szeretnél, és bizony ez a 'majdnem' ez elég idegesítő lehet. Ebben a fejezetben elmagyarázom, hogyan lehet a gyakori hibákat kijavítani, és megnézzük, a tudomány hogyan segíthet neked a hibajavításban.

Jellemző hibák

A legtöbb jellemző hiba két forrás valamelyikéből származik:
  1. Véletlen elgépelésből.
  2. Logikai hibából.
A logikai és matematikai hibák sajnos igen sokfélék lehetnek. A következő részben a gépelési hibákról fogunk beszélni.

Szintaktikai hibák (Syntax error)

Ha egy programozói könyv mond valamit hogy azt a dolgot úgy kell leírnod, akkor azt pontosan úgy kell írnod, ahogyan mondja. Ha azt írja a könyv, hogy:

@a=(1,2);
foreach $b (@a)
    {
   print $b;
    }

de te ezt írod:

@a=(1,2);
foreach b (@a)
    {
   print $b;
    }

Mi fog történni?

Valami egészen más mint amit te szerettél volna.

Egy dollárjel lemaradt, ezért a számítógép egészen mást fog csinálni, mint amit várnál.

Nem tehetné azt amit gondolsz?

Hát nem. Tudni amit gondolsz, az emberi intelligenciát feltételez, de a gép ezzel nem rendelkezik.

Ami történik igen gyakran ha ilyen egészen kicsivel eltérő dolgot írsz is be -- ami valaki más embernek fel sem tűnik -- a gép nem tudja javítani. Ha hibáztál, olvasd el alaposan a kódot hogy kiderüljön, valóban azt írtad-e be mint amit gondoltál hogy beírtad.

Helyesírási hiba

Mi történik, ha ezt írod be:

$pizza = 12;
print "$pizzza\n";

Te azt szeretnéd hogy kiírja a 12-t. Igen ám, de véletlenül egy 'z' betűvel többet írtál, emiatt a gép 0-t ír ki. Miért? A $pizza változó értéke 12 lesz, de a $pizzza egy más változó, tehát valószínűleg az értéke sem 12.

Ha hibát észlelsz, bizonyosodj meg arról, hogy minden változó és függvény nevét pontosan azonos módon írtad mindenhol ahol csak megjelenik.

Kihagyott pontosvessző

Mi történik ha ezt a kódot írod be:

print "Helló világ!\n"

Amit szeretnél, hogy írja ki neked, hogy "Helló világ!". De a program hibával leáll. Várt volna egy pontosvesszőt, de mivel nem találta, összezavarodott. Figyelj rá, hogy mindig minden sor, kivéve persze azokat a sorokat, ahová nem kell, pontosvesszőre végződjön.

Egyszeres és kétszeres egyenlőségjelek

Mi lesz ha futtatjuk a következő kódot::

$a = 1;
$b = 2;
if ($a = $b)
   {
   print "Egyenlőek!";
   }
else
   {
   print "Nem egyenlőek.";
   }

Mit szerettél volna hogy történjen? Hasonlítsa össze az 1-et és a 2-t, majd írja ki hogy nem egyenlőek. Csakhogy ha ezt futtatod, azt írja ki, hogy egyenlőek. Miért? ($a = $b) azt mondja, hogy a legyen egyenlő b-vel. De amit akartunk, az ($a == $b), ami összehasonlítja őket.

Az '=' arra való hogy értéket adj valaminek és a '==' hogy összehasonlíts dolgokat. Nagyon könnyű elrontani és így hibás programot írni.

Tudományos hibakeresés

Hogyan működik a tudományos metódus?

Dióhéjba a következő: ha egy tudós nem ért valamit, kigondol egy feltevést, majd kitalálja a módját hogyan mutassa meg hogy a feltevés hibás. Aztán sok tesztelés után, amikor a feltevés igaznak bizonyul, bekerül a tudományba.

Ha nem értesz valamit hogy miért nem működik, készíts elméleteket ("ha a programom rosszul számol, és a változó értéke az előtt a programrész előtt még jó volt, de utána rossz értéket kapott. Tudom már! Beszúrok egy print utasítást a programrész elé és mögé hogy lássam az ottani értéküket") segíthet megérteni miért hibázik a programod.

Ha van egy tudós tanárod aki szokott programozni, nagyon hasznos lehet ha megkéred egyszer, mikor nem túl elfoglalt, mondja el neked, hogyan segít a tudományos módszer a hibakeresésben?

Következtetés

Remélem, ez az anyag segített neked elkezdeni kontárkodni, játszani, és felfedezni mi mindent csinálhatsz a számítógéppel ha érted a nyelvét. Ha kész vagy tovább haladni a tanulás ösvényein, olvass jó programozási könyveket, kérdezz, és ami a legfontosabb, szorgalmasan barkácsolj továbbra is!

Szeretnél olyan könyveket, amik többet is mondanak? O'Reilly tett közzé nagyon hasznos írásokat. A Learning Perl (Tanulj Perlt) is egy kiváló választás lehet. Aztán ha ezeket kinőtted, a Programming Perl, ismertebb nevén the camel book vihet még messzebbre.

És ha tetszett amit most olvastál, és szeretnél még ilyesmit olvasni, íme amiket még írtam. Biztosan találsz még közöttük érdekeset.

-Jonathan