Niels Gamborgs online notesbog

Debugging for begyndere

april 23rd, 2010. Kategori: Programmering

Tips 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

  1. Tjek, dobbelt tjek og triple tjek
  2. Skriv variabler ud
  3. 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.

  1. 4 Responses to “Debugging for begyndere”

  2. 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

  3. 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.

  4. 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.

  5. 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.

Skriv en kommentar