Debugging kan være en plagsom ting. Frustrere deg godt og du kan tro all håp er ute. Du kan til slutt tro at det er ingenting feil med kodene dine, for du har gått igjennom alt. Her kommer en liten innføring i hvordan du kan debugge selv. Slik at mange unødvendige spørsmål kommer opp i PHP-forumet på NWF. Listen er satt opp etter hva du burde gjøre kronologisk. Start med punkt én, og jobb deg nedover listen.
Det er store sjanser for at du løser problemet lenge før du i det hele tatt kommer nedover på listen. De fleste problemer blir løst på punkt 3 av listen.
- Les feilmeldingen nøye. Det er en grunn til at feilmeldingene kommer og de er faktisk ganske opplysende. Om det er noe du ikke skjønner i feilmeldingen, som hva T_VARIABLE er, burde du ta et kjapt på T_VARIABLE i google.
- Du får oppgitt linjenummer hvor det feiler i en feilmelding. Linjenummeret er veldig essensielt. Du går til linjen og sjekker hva som er galt. Noen ganger når det er PARSE-ERROR lønner det seg å se på linjen før det feilmeldingen sier. Dette kan være tegn som er glemt på linjen ovenfor, som å glemme å avslutte et if-statment, eller du har glemt å avslutte linjen med semikolon.
- Har du med MySQL og gjøre vil ikke MySQL feilene komme på lik linje som PHP-feil. Du vil bare ikke få noe resultat ut, og alt kan tyde på at det ikke er innhold i databasen/tabellen din. Er du sikker på at du har innhold med de kriteriene du er ute etter, må du printe ut mysql_error () for å finne ut hvilken feilmelding det er MySQL kommer med. Dette kan du gjøre på mange måter, men den mest brukte er som regel å legge til “or die (mysql_error());” etter siste ) i mysql_query eller tilsvarende som returnerer bool (returnere bool betyr enten sant eller ikke sant. (true|false)). Annen måte du kan gjøre det på er:
1 2 3 4 5
$query = mysql_query ("SELECT id FROM table"); if(!$query) { echo "En feilmelding i spørringen:\n"; echo mysql_error(); }
Har du problemer med å løse det som står i feilmeldingen, bruker du manualen til MySQL for å sjekke hva enkelte ting støtter, og hvordan det skal gjøres. Eventuelt tar du å kopierer feilmeldingen inn i google og søker etter lignende saker. Da finner du garantert ut hva som kan løse saken.
- Inneholder arrayen/objektet/variabelen det du vil den skal inneholde? Får du helt feil resultat ut på siden din, bruker du var_dump/print_r på objekt/arrays, mens echo/die på variabler, for å sjekke om de inneholder det de skal. Om de ikke gjør det bruker du punkt 5 til å finne hvor det blir feil, og hva det er som virkelig skjer.
- Finn ut hvor det feiler! Om du ikke får ut noen feilmelding av noe slag, men du kommer bare ikke frem til dit du vil komme frem betyr det at en if-sjekk slår inn der du ikke vil den skal slå inn. En funksjon returnerer noe feil. Da må du finne ut hvor dette skjer. I hvilken brakke er det nettleseren kommer til? Slik finner du ut hvor det feiler, og dermed hva som er feil. Ta utgangspunkt i der du forventet at du skal komme og sett f.eks die (’Kom inn hit’); i det ytterste leddet. Kommer den dit? Nei? Da går du inn et nivå, og sjekker om den kommer inn dit. Slik jobber du deg innover for å ekskludere plasser hvor det feiler. Til slutt vil du komme til der den kommer inn. Du finner f.eks ut at det er en funksjon som returnerer false i stedet for true som du ville den skulle gjøre. Er det en selvdeklarert funksjon går du inn på funksjonen for å bruke samme metode for å komme inn til der den faktisk returnerer false.
- Siste punkt, er det i alle fall ikke ofte jeg kommer frem til når jeg har brukt metodene ovenfor. Uansett er siste punkt veldig enkelt. Det er nesten garantert at dette punktet vil løse opp problemet ditt også: Just Fucking Google it!
Eksempel på debug
Jeg har et nyhetsscript. Når jeg prøver å legge inn informasjon fra form der, vil det aldri bli satt inn noen verdier i tabellen min i databasen. Ingenting kommer. Jeg får ingen feilmelding, men det kommer bare ingenting. Derfor hopper jeg over punkt 1 og punkt 2, siden det ikke er noen feilmelding i PHP. Da kommer jeg rett på punkt 3, som er å se på mysql_error. Jeg legger til som eksemplet ovenfor, og finner at det er for $_POST-verdiene mine ikke får noe som helst slags verdi. Merkelig tenkte jeg. Så jeg går videre til punkt 4, som sier at jeg skal sjekke hva er det $_POST-arrayen inneholder. Så jeg tar en die (print_r($_POST));. Der finner jeg følgende:
Array (
[title] => Hei du kåre,
[message] => Min tekst nedover her
)
Da ser jeg va nøkkel-verdiene er på $_POST arrayen. Og finner ut hva jeg gjør feil. Jeg har heletiden brukt $_POST['tittel'] og $_POST['melding'] i stedet for $_POST['title'] og $_POST['message'].
Slik kan du bruke listen. Og som sagt er det veldig sjeldent at du i det heletatt kommer ned til å måtte google feilen.