En god debugging funksjon til live debugging.

Denne posten er inspirert av en post på siden dev1.no, med navn Feilsøking i webapplikasjoner som er i drift.

Når en skal debugge bruker vi som regel en enkel

  1. <?php
  2.    die('Her');
  3. ?>

Eller lignende for å indikere hvor det stopper i scriptet. Om du debugger en side som er live, vil du gjerne ikke stoppe hele siden for alle brukere. Derfor vil du gjerne kun vise debugging infoen for deg, og ingen andre. Det er flere måter å gjøre det på, men måten jeg ville ha brukt er funksjonen nedenfor.

Først og fremst må du opprette en variabel/array som inkluderes til alle sider. Dette skal ikke være et problem om du har en config-fil eller funksjoner som du inkluderer og er nødvendig for systemet. Da er det bare å sette opp følgende en plass hvor hele systemet får tak i det:

  1. <?php
  2.    $debug_info = array();
  3. ?>

Ikke bare må det settes, men også en funksjon som gjør at det blir enklere å legge til informasjonen i arrayen. Du kan selvfølgelig gjøre det manuelt, men det kan bli litt tungvindt etterhvert. Så vi har en wrapper funksjon som gjør det meste for deg:

  1. <?php
  2. function debug ($line, $file, $message, &$debug_info,
  3. $statement = true) {
  4.  
  5.    if($statement) {
  6.       $debug_info[] = 'Line: ' . $line . '. File: ' . $file .
  7.          '. Message: ' . $message;
  8.       return true;
  9.    }
  10.    return false;
  11.  
  12. }
  13. ?>

Her bruker vi noe som kalles call-by-referance. Det vil si at du kan gjøre endringer på variablen satt i argumentet og det vil også skje endringer på variablen du setter i argumentet.

Måten du finner linje og fil på er enkelt med __line__ og __file__. Dette blir satt i argumenter for å finne hvor det er du kjører funksjonen, og ikke der du oppretter funksjonen.

$statement er noe du setter til å bli i boolean-verdi. Dette kan være f.eks brukersjekk. Som du kan se eksempel på under her.

Når du kaller funksjonen kan det ca se slik ut:

  1. <?php
  2.    debug (__line__, __file__,
  3. 'Feiler med MySQL-spørring. Query: ' . $query, $debug_info,
  4. ($_SESSION['userid'] == $admin_userid));
  5. ?>

Eller om du ikke har noen kriterier til if-statementet.

  1. <?php
  2.    debug (__line__, __file__, 'Feiler ved punkt 3.', $debug_info);
  3. ?>

Slik får du informasjon om hvilken fil det er, hvilken linje det skjer på og hva feilen er. Og når du vil skrive ut feilmeldingene kan du enten lage en egen side som inkluderer filen hvor funksjonen og variablen blir satt, eller du kan skrive ut $debug_info nederst på indeks-siden.

  1. <?php
  2. print_r($debug_info);
  3. ?>

Slik er det du kan debugge en side live, uten at besøkende ser det som skjer.

Legg igjen respons

Fyll ut alle felt markert med *

Brukerinformasjon
  1. Kan bruke følgende html: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> og [html] [css], [mysql] og [php] Hold posten ren og fin!

    Siter valgt tekst

E-post-varsel uten å skrive kommentar.

Info om posten

Innlegget ble postet 14.01.08 10:05 og ligger under kategorien PHP / MySQL. Du kan abonnere på kommentarene ved å bruke RSS 2.0 feed. Du kan legge til kommenter, eller trackback fra din blogg/side.

Resurser

Arkiver

Metainfo


Siste Flickr-bilder

  • Commentsystem (20070308)
  • Ukraina Aksjonen 2006 (20070306)
  • Mikael Brevik blogg (20070306)
  • Mikael Brevik (20070306)
  • Brukerdefinert side - AVIS2 (20070306)
  • Brevik Webutvikling (20070306)
  • skyscraper
  • visittkort