Naarmate je meer ervaren raakt als programmeur, kun je een reeks aan hulpmiddelen inzetten om fouten in je code te identificeren en verhelpen, zoals een debugger, unit testing, of traceer software.
Als je leert programmeren, heb je hier echter nog geen beschikking over terwijl je waarschijnlijk juist nu tegen een reeks foutmeldingen aan gaat lopen. We geven je daarom enkele handvaten om je te helpen bij het debuggen ofwel het opsporen en verhelpen van fout in je eerste programma's.
Het is eigenlijk niet mogelijk om je programma te vaak te testen door tussentijds de code uit te voeren. Doe dat dus na een serieuze wijziging! Daarbij krijg je iedere keer dat je het programma uitvoert feedback of het werkt en je dus de goede kant op gaat of dat er plotseling fouten optreden.
Test je regelmatig, dan is het makkelijker om na te gaan waar een fout geïntroduceerd is: ergens in de aanpasingen na de vorige succesvolle test.
Is het niet direct duidelijk waar de fout precies zit, dan kunnen onderstaande technieken helpen om de fout te lokaliseren.
In principe zou je bij iedere lijn code moeten weten welke waardes je variabelen op dat moment hebben. Zie je andere waardes terug na het uitvoeren van het programma, dan kan het helpen om na te gaan op welk punt in de code de variabelen onverwachte waardes aannemen.
Een makkelijke manier om dit te doen is deze waardes tussendoor weer te laten geven, zoals in het voorbeeld hieronder. Wijken deze op een punt af van wat je zou verwachten, dan heb je waarschijnlijk de fout gevonden.
Door een gedeelte van je code in commentaar te plaatsen, worden deze regels tijdelijk niet meer uitgevoerd. Je kunt zo systematisch bepaalde stukken code 'uitschakelen' om te zien of daarmee de fout verdwijnt. Is dat zo, dan is de fout waarschijnlijk te vinden in het gedeelte van de broncode dat je uitgecommentariëerd hebt.
Wanneer er een eerdere werkende versie van je code bestaat en je git gebruikt, kun je het commando git bisect
gebruiken om exact te bepalen welke commit de fout geïntroduceerd heeft. Je test hiermee meerdere keren een versie van je programma midden tussen de meest recent geteste 'goede' en 'foute' versies waardoor je steeds verder inzoomt en uiteindelijk precies weet welke commit de fout veroorzaakt heeft.
Zie voor details de documentatie van git.
In veel gevallen merk je een fout op doordat je een foutmelding krijgt. Doorloop de volgende stappen bij het lezen van een foutmelding, waarbij de exacte details verschillen per taal en je niet altijd al deze informatie krijgt.
Mocht je er niet uitkomen omdat je niet scherp hebt wat de foutmelding inhoudt, dan kan het zinnig zijn om online op (een gedeelte van) de melding te zoeken. Vaak vind je dan een toelichting bij de foutmelding waardoor je beter kunt plaatsen wat er misgaat.
Ter illustratie, met de onderstaande Python code zou je een woordenboek willen maken en printen:
data = ("Name":"John", "Surname":"Smith") print (data)
Wanneer je het echter uitvoert, krijg je de volgende foutmelding:
File "classmates.py", line 1 data = ("Name":"John", "Surname":"Smith") ^ SyntaxError: invalid syntax
Aan de hand van de hiervoor beschreven stappen lees je deze foutmelding als volgt:
Als je niet uit de foutmelding komt of inspiratie nodig hebt voor jouw oplossing, biedt het internet vaak de uitkomt.
Je kunt dit doen door naar de meest zeggende (meestal laatste) regel van de foutmelding in een zoekmachine te zoeken en te kijken of dit je naar de juiste documentatie leidt. In het voorgaande Python voorbeeld zou dat 'SyntaxError: invalid syntax' zijn, waarbij je deze behulpzame resultaten vindt.
Daarnaast kun je rechtstreeks in Stack overflow zoeken. De kans is aardig dat je daar tijdens je zoektocht uit gaat komen.
Wees daarbij terughoudend met zelf je probleem op Stack overflow te plaatsen in de hoop dat het door meer ervaren programmeurs opgelost wordt. Op die manier leer jij jezelf niet om dit soort problemen zelf op te lossen terwijl dat juist is wat je in deze fase van je opleiding onder de knie wilt krijgen!
Heb je alles hierboven geprobeerd en lijkt dat niet te helpen, pak dan een voorwerp zoals een rubber eendje of een huisdier en doe hiermee het volgende:
Door het probleem op deze manier aan een 'ander' uit te leggen, verhoog je de kans dat je zelf opeens een oplossing ziet. Daarbij is een groot voordeel van rubber duck debugging dat je andere niet hoeft te onderbreken (en je rubbere eendje heeft altijd tijd voor je).
Lukt het nog steeds niet, dan kun je natuurlijk een assistent om hulp vragen. Op dit punt zou je scherp moeten kunnen formuleren wat het probleem is waar je tegenaan loopt en kan de assistent je hopelijk dus snel weer op weg helpen!
Deze tekst is gebasseerd op de presentatie 'Quick guide on debugging: How to Troubleshoot and Fix Your Code Without Pulling Your Hair Out' door Jurre Brandsen voor de cursus Programmeertalen in 2020.