Feilsøking i webapplikasjoner som er i drift

Noen ganger må man debugge en webapplikasjon etter at den har blitt satt i drift,gjerne når problemstillingen ikke lar seg reprodusere i andre miljøer eller på testinstallasjoner. Følgende er en rask introduksjon basert på Drupal og PHP, men den fungerer også i Perl og Python.

Den "riktige" måten å debugge PHP applikasjoner på er riktignok XDebug, som gjør det mulig for PHP å koble seg til utviklingsverktøy på din maskin for å vise nøyaktig hva som foregår. Men ofte er ikke dette praktisk, det kan være krevende å sette opp forbindelsen, og man kan diskutere hvorvidt xdebug bør være installert på en produksjonsserver.

En enkel måte, som de alle utviklere har brukt på et eller annet tidspunkt, er å legge print eller echo rett inn i koden hvor man tror feilen oppstår. Ulempen med dette er at alle får se disse utksriftene, noe som er irriterende og kan føre til eksponering av sensitive opplysninger.

Hakket bedre er det å kun skrive ut for utviklerens bruker:
global $user;
if($user->uid == 123) {
echo "Da var vi her, ja!";
}

Men også dette kan fort bli kjedelig, spesielt dersom du har dette i x antall filer og ikke blir ferdig i løpet av dagen.

En allright løsning er derfor å legge dette in en funksjon som du definerer i en felles fil:
global $debug_ar;
$debug_ar = array();

function quick_debug($str) {
global $user, $debug_ar;
if($user->uid == 123) {
$debug_ar[] = $str;
}
}

Hvis du jobber med Drupal så kan du legge dette helt først i index.php, i andre programmer må du finne et sted som leses ved hver sidevisning.

Nå kan du legge
quick_debug("Dette vil jeg vite");
der hvor du tidligere ville brukt echo eller print. Dersom det er noen andre enn deg (bruker id 123) som ser på siden vil de ikke merke noe som helst. Meldingene samles opp i $debug_ar.

Til slutt må vi skrive ut innholdet av $debug_ar. Dersom problemet ikke er at scriptet kræsjer underveis anbefaler jeg å gjøre dette helt til slutt, helst etter den siste . Igjen, i Drupal er dette helt nederst i index.php

global $user, $debug_ar;
if($user->uid == 123) {
print_r($debug_ar);
}

Hvis du nå logger inn som deg selv vil du alltid finne debug-utskriftene nederst på siden. Avhengig av hvor mange du har kan dette koste litt ytelse, men i de fleste tilfeller blir dette under 1% av belastningen ved å generere en side.

  • Skriv ut artikkel
  • Abonner med RSS

Innhold