Razhroščevanje je iskanje in odpravljanje napak v programski kodi. Napaka (bug) je vsako nepričakovano vedenje programa — od sesutja cele aplikacije do drobnega napačnega izpisa. Razhroščevanje ni postranska naloga, ampak ena najpomembnejših veščin vsakega razvijalca: nekateri podatki pravijo, da razvijalci preživijo kar polovico delovnega časa ravno ob iskanju napak.
console.log("Tako daleč sem prišel");
Izvor besede bug
Zgodba sega v leto 1947, ko so v Harvard Mark II računalniku našli pravo veščo (hrošča), ki je povzročal težave, in ga prilepili v dnevnik z opombo o »prvi dejanski napaki« (ang. bug). Resnica je še starejša — inženirji so napake imenovali tako že stoletje prej, a slavna vešča je besedo proslavila po vsem svetu.
Branje sporočil o napakah
Najosnovnejša veščina je branje napake. Vsako sporočilo o napaki pove tri stvari: kaj se je zgodilo, v kateri datoteki in na kateri vrstici. Razvijalcem, ki sporočila preberejo do konca, se napaka pogosto razkrije kar sama.
Fatal error: Uncaught TypeError: Unsupported operand types: string + int in /var/www/register.php on line 42
Izpis v konzolo
Najpogostejša tehnika je izpisovanje vrednosti med izvajanjem. Kaj trenutno vsebuje spremenljivka? Ali se je funkcija sploh izvedla? Izpis v konzolo ali dnevnik nam pove, kaj program dejansko dela — ne tisto, kar mi mislimo, da dela.
console.log(uporabnik); // JavaScript: izpise objekt var_dump($podatki); // PHP: izpise vrsto in vsebino print_r($rezultat); // PHP: izpise berljivo
Razhroščevalnik (debugger)
Naprednejše orodje je razhroščevalnik — program, ki omogoča ustaviti izvajanje kode na poljubni vrstici (prelomna točka), nato pa lahko po vrsticah spremljate potek izvajanja in v vsakem trenutku preverjate vrednosti spremenljivk. PhpStorm ima razhroščevalnik vgrajen, enako velja za razvijalska orodja v brskalnikih (DevTools).
- Nastavimo prelomno točko (breakpoint) v sumljivi vrstici.
- Zaženemo program v načinu za razhroščevanje.
- Ko se izvajanje ustavi, preverimo vrednosti spremenljivk.
- Pomikamo se korak za korakom naprej in opazujemo, kje vrednosti odstopajo od pričakovanj.
Metoda delitve
Ko napaka ni očitna, pomaga metoda delitve. Zakomentiramo polovico kode in preverimo, ali napaka ostane. Če je, se skriva v preostali polovici, če ne, v zakomentirani. Ponavljanje tega postopka hitro zoži iskanje na nekaj vrstic — pri dolgih datotekah je to lahko prava rešitev.
Preprečevanje napak
Veliko napak se da preprečiti, preden sploh nastanejo: jasno poimenovanje spremenljivk, majhne funkcije z eno nalogo in preverjanje tipov (TypeScript) zmanjšuje možnost za nastanek napak. V jeziku PHP že majhna sprememba prinese opazne rezultate: vklop strogega preverjanja tipov na začetku datoteke.
declare(strict_types=1);
Odpravljanje napak ni znak slabega razvijalca — prav nasprotno. Program brez napak še nikoli ni bil napisan, zato iskanje in odpravljanje napak ni moteča prekinitev dela, temveč del samega dela.