Debugging for begyndere
april 23rd, 2010. Kategori: ProgrammeringTips til debugging
Denne guide til bebugge rettet mod begyndere i programmering.
Jeg vil give konkrete tips og idéer samlet i 3 simple trin. Jeg bruger PHP og JavaScript eksempler, men metoderne til at debugge er universelle, og kan bruges i forbindelse med alle programmeringssprog.
Baggrunden er, at jeg i forbindelse med mit gæstebogs script får en del henvendelser om hjælp.
Basal debugging
Basalt set handler debugging om at isolere problemer. Det gør man ved at skille tingene ad og undersøge de enkelte dele. Virker hver enkelt del, som vi forventer?
3 simple trin til debugging
- Tjek, dobbelt tjek og triple tjek
- Skriv variabler ud
- Skil koden ad
1. Tjek – dobbelt tjek – triple tjek
Start med at tjekke og dobbelt tjekke alle indtastninger, parenteser, tegn etc. Er variabelnavne identiske? Er funktionskald og navne er stavet rigtigt? Er syntaksen korrekt? Når det er gjort, så tjek det hele en gang til…
2. Skriv dine variabler ud
Næste trin er at skrive dine variabler ud. Og fylde en masse print statements i din kode. Så kan du se hvilke værdier dine variabler har og hvor meget af koden, der bliver afviklet. Brug f.eks. echo i PHP og alert() i JavasScript:
PHP eksempel:
$brugernavn = $_GET[‘brugernavn’];
echo $brugernavn;if($brugernavn == “”){
echo ‘test1’;
do something…
echo ‘test2’;
}else{
do something else …
echo ‘test3’;
}
JavaScript eksempel:
var brugernavn = document.getElementById(‘brugernavn’).value;
alert(brugernavn);
if(brugernavn.length() < 3){
do something …
alert(‘test1’);
}else if{
alert(‘test2’);
do something else …
alert(‘test3’);
}
Super debug metode til at finde ud af, hvor langt du kommer i afviklingen af koden, før det går galt. Bliver koden i kodeblokkene afviklet, som du forventer?
Hardcode dine variabler
Du kan også prøve at hardcode dine variabler i stedet for at hente dem med dit script.
$brugernavn = “Nikolaj”;
Det er en god metode til at isolere og afdække, om det er når du henter data eller behandler data, at du får fejl.
3. Skil koden ad og simplificér den
Prøv at pille koden fra hinanden og gør den enkel, så du kan tjekke de enkelte dele. Prøv f.eks.
if(2 == 2){…
frem for:
if(strlen(trim($_GET[‘brugernavn’])) > 0 ){…
Så får du debugget om det er dine kodeblokke eller det er de betingelser, du har sat op i if-sætningerne, der er problemer med.
På samme måde kan du pille kodeblokke helt ud af for-løkker etc. Eller du kan simplificere dem ved at hardcode tallene i løkken som f.eks.:
for(i=0; i<5; i++;) {…
Bonus tips
2 almindelige syntaks fejl
Her er 2 meget almindelige fejl, hvor fejlmeddelelserne ikke umiddelbart afslører problemet.
PHP eksempel:
Parse error: parse error, expecting `’,” or `’;” in C:\wamp\www\test\minSide.php on line 13
Denne PHP parse error opstår, når du ikke har afsluttet den foregående linje med et semikolon.
JavaScript eksempel:
minFunktion is not defined
Denne JavaScript fejl optræder , når du forsøger at kalde en tidligere defineret funktion. Funktionen kan sagtens være defineret, men indeholder ´f.eks. en syntaks fejl som en krølle-parantes/tuborg-parantes for meget eller for lidt.
Google din fejlmeddelelser
Du er helt sikkert ikke den første der har problemet. Fjern lokale navne fra din fejlmeddelser og søg på Google. Måske du kan finde hjælp til at indsnævre problemet.
Værktøj til debugging
JavaScript udvikling foregår bedst i en Firefox browser, fordi Firefox har gode værktøjer til debugging af JavaScript. Brug enten Firefox’s indbyggede fejlkonsol eller Firefox plugin’et Firebug. Begge giver gode og overskuelige fejlmeddelelser.
Afrunding
Debugging er en fast bestanddel af al programmering. Når man programmerer laver man også fejl. Heldigvis bliver man som regel bliver både dygtigere og klogere af det. Og næste gang er det nogle helt andre fejl, man laver. 😉
Kender du andre gode begynder tips, så smid endelig en kommentar.
4 Responses to “Debugging for begyndere”
By Alex Jessen on apr 3, 2012
Jeg har prøvet at lægge din gæstebog ind på
min hjemmeside og jeg har brugt den fil med alle 4 moduler og når siden kaldes, får jeg en meddelelse, der lyder:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /volume1/web/bog.php on line 71
og linie 71 er i dit ‘alle moduler’-fil!
Jeg har (endnu) ingen erfaring med MySQL og kan ikke gennemskue det her!
I
By Niels on apr 5, 2012
Hej Alex
Jeg kan desværre ikke hjælpe dig. Det kræver enten et fantastisk overblik, hvad jeg ikke har, eller at man har koden med fejlen kørende selv for at kunne debugge.
Men som jeg skriver i indlægget kan du jo skifte parameteren i mysql_fetch_array() ud med en hardcoded en. Og du kan prøve at skrive variablen, der angiver parameter, ud.
Det vil være med til at isolere buggen, og dermed give dig yderligere info om hvor problemet ligger.
By Bent Arnoldsen on sep 24, 2014
Hej Niels
Jeg hylder dovenskaben i forbindelse med både kodning og fejlfinding.
En god måde at være doven på er at lade programmet hjælpe en så langt ad vejen som det kan. Jeg tænker her på syntaks-farvning, syntaks-tjek og code-completion i de moderne editorer man kan få (og evt. købe) i dag.
De værktøjer jeg selv bruger/har brugt er:
– Notepad++ der har en effektiv syntaksfarvning, og som kan noget code-completion
– Netbeans der kan alle 3 ting ret effektivt – til tider lidt for nævenyttigt med syntaks-tjek
– Visual studio (Express), der er speciel effektiv til code-completion
Der findes mange flere værktøjer, også gratis, så som eclipse.
Ved at anvende dem effektivt, så kan man spare sig selv for mange kedelige timers gennemlæsning af tør kode.
By Niels on sep 24, 2014
Et godt indspark, Bent. En ordentlig editor er guld værd, både til at finde og undgå fejl.