Debuggen

Home / Programmeren / Debuggen

Waarschijnlijk kom je het meer dan eens tegen dat je programma niet werkt, en je hebt geen flauw idee waarom. Soms ben je dan uren bezig met het zoeken naar de fout, of soms vindt je hem helemaal niet! Dat is zonde. Daarom gaan we in deze tutorial handige manier om te debuggen (dat is fouten uit je programma halen) bespreken.

Zoeken

We beginnen eerst met uit te zoeken waar de fout zit. Dit gaat hier misschien een beetje abstract, maar dat komt omdat het voor alle programmeertalen bruikbaar moet zijn. Stel, je hebt een script dat de gebruiker iets vraagt en dat in een variabele stopt, vervolgens het een en ander eraan wijzigt, en vervolgens weer op het scherm zet. Alleen werkt het niet zoals jij het wilde, er verschijnt een foutmelding op het scherm of er gebeurt helemaal niets.

Dan gaan we zoeken waar de fout zit. Als je een foutmelding krijgt waar een regelnummer in staat is het simpel, gewoon de regels gaan tellen ;). Als je net een aantal regls code hebt toegeveogd kun je daar even gaan kijken. Zo niet, dan gaan we met dedcutie werken. Je gaat controleren in welk stuk code de fout zit, en vervolgens daarin weer preciezer zoeken enzovoort.

Plaats aan het begin en aan het eind van het stuk code de opdracht op de variabelen die je gebruikt op het scherm zetten. In het vorige voorbeeld zet je die dus voor de uitvoer en na de invoer (om het bewerkingsgedeelte heen dus). Blijkt nou dat alles goed is gegaan, dan is er dus een fout met de laatste regel, want die geeft het niet goed weer. Even kijken of er geen variebelnaam verkeerd is gespeld, of dat de opdracht niet de goed is ofzo. Als het nu wel de code is, dan plaats je er nog zo'n opdracht ergens tussenin. Blijkt het nu niet daar te zijn, dan is het dus de andere helft. Zo kun je vaak tot op de regel nauwkeurig natrekken waar de fout zit, en met welke variabelen het fout gaat Nu even goed kijken wat er fout is!

Veelgemaakte fouten

De meest gemaakte fout is het vergeten van het commando afsluit teken. In de meeste talen is dit een puntkomma, en in sommige talen (zoals BASIC) bestaat het gewoon niet, omdat het zo vaak fout gaat. Deze fout is eenvoudig op te lossen: meestal krijg je bij deze fout een vermelding met regelnummer.

Ook wordt vaak een commando verkeerd geschreven. Dat noemen we een syntax fout. Je schrijft dan bijvoorbeeld eco in plaats van echo of iets degelijk, of je geeft het verkeerde aantal parameters mee. Ook hier krijg je vaak een fout met de vermelding van het regelnummer.

Wat lastiger zijn de logische fouten. Hierbij zet dat wat je wilt doen verkeerd om naar commando's, je zet bijvoorbeeld een < in plaats van een > of je programma werkt gewoon niet omdat je de computer niet zegt wat ie moet doen.

Mocht je er echt niet uitkomen, dan helpen wij je graag op het forum! Plaats je code en je probleem, en wij zullen het proberen op te lossen.

Beveilingsfouten

Vooral bij interactieve websites (met PHP en/of Javascript) moet je oppassen dat er niet in te breken is. Vaak wordt door hackers zogenaamde SQL injection geprobeert. Je moet dan controleren of de gebruiker mogelijk zelf een nieuw commando in kan voeren. Even een voorbeeld in SQL met PHP:

$sql="INSERT INTO 'tabel' ('naam') VALUES ('" . $_GET['comm'] . "')";

Nu kan de hacker bovenin de balk invoeren: bestand.php?comm=0); DROP TABLE 'tabel';
In dit geval verwijderd de hacker je gehele tabel. Zorg er daarom voor dat de gebruiker dat niet kan doen, doordat je deze mogelijkheid niet biedt, of een speciale manier inbouwt om deze aanval te weren. Er zijn nog wel meer fouten, maar die bespreken we nu niet.

Testen

Maar hoe kun je nu testen of er echt geen fouten inzitten? Daarvoor moet je gewoon heel goed alles testen! Kom je dan een fout tegen, verhelp het dan en ga weer teste, totdat je weinig fouten meer tegenkomt. Je kunt ook aan anderen (vrienden en familie) vragen of zij het willen testen. Als je het dan gaat testen, test dan ook wat het programma doet als je extreem hoge of lage waardes invoert. Crasht het programma of geeft hij een foutmelding? Dan moet je misschien een beveiliging inbouwen zodat de gebruiker die hoge waardes niet kan gebruiken! Bij bijvoorbeeld een programma dat iets aan de hand van windkracht uitrekend moet e eens 200 beaufort invullen: Die waarde bestaat niet, want die schaal gaat tot 14. Je moet ook even op negatieve waardes testen, dus bijvoorbeeld -3 ofzo.

Dit was de tutorial debuggen. Hopelijk heb je iets geleerd. Succes met je programma!