fejlfinding af PHP-Scripts med NetBeans IDE
som du allerede ved, når nogen skriver kode på et sprog på højt niveau, er der to typer fejl, som han eller hun kan lave—syntaksfejl og logiske fejl. NetBeans IDE giver alle de nødvendige værktøjer til at hjælpe dig debug dine scripts og finde fejlene.
Debugging syntaksfejl
heldigvis registrerer NetBeans IDE syntaksfejl, mens du skriver, og understreger dem med en bølget rød linje som vist i Figur 1.
Figur 1 i NetBeans IDE understreges syntaksfejl med en bølget rød linje
alt hvad du skal gøre er at rette den tilsvarende fejl, og den røde linje forsvinder med det samme. Men hvis du ikke er sikker på, hvad der er galt med din kode, kan du bare placere musemarkøren på det røde udråbstegn. NetBeans IDE vil forsøge at hjælpe dig ved at vise et popup-vindue med en kort forklaring af fejlen, som vist i figur 2.
figur 2 NetBeans IDE viser en forklaring på en syntaksfejl
fejlfinding af logiske fejl ved at udføre scripts trin for trin
sammenlignet med syntaksfejl er logiske fejl sværere at finde. Da NetBeans IDE ikke kan få øje på og understrege logiske fejl, er du helt alene! Lad os se på følgende PHP script, for eksempel. Det beder brugeren om at indtaste to tal og beregner og viser deres sum. Det indeholder dog en logisk fejl!
<?php $s = 0; echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $S = $a + $b; echo "The sum is: ", $s;?>
hvis du skriver dette script i NetBeans IDE, vil du bemærke, at der ikke engang er et udråbstegn, der angiver nogen fejl. Hvis du udfører scriptet (SHIFT+F6) og indtaster to værdier, 5 og 2, kan du selv se, at selvom summen af 5 og 2 er 7, insisterer NetBeans IDE på, at det er nul, som vist i figur 3.
figur 3 Visning af resultatet af en logisk fejl i Outputvinduet
hvad dælen foregår? Selvfølgelig for en ekspert programmør, korrigere denne fejl ville være et stykke kage. Men for dig, en nybegynder, selvom du prøver hårdt, finder du intet galt. Så hvor er fejlen?
nogle gange bliver menneskelige øjne så trætte, at de ikke kan se det åbenlyse. Så lad os prøve at bruge noget magi! Lad os prøve at udføre scriptet trin for trin ved hjælp af debuggeren. Dette giver dig mulighed for at observere strømmen af udførelse og se nærmere på de aktuelle værdier af variabler i hvert trin.
Start debuggeren ved at vælge “Debug →
Debug File” fra hovedmenuen eller ved at trykke på CTRL+SHIFT+F5 tastekombinationen. Ved at gøre dette aktiverer du debuggeren, og flere ikoner vises på værktøjslinjen.
Bemærk: For at aktivere fejlsøgeren skal du ændre PHP.INI-fil. Mere information her.
programtælleren (den grønne pil ikon i den grå margen) stopper ved den første linje i scriptet som vist i figur 4.
figur 4 Brug af debugger i NetBeans IDE
Bemærk: programtælleren viser dig til enhver tid, hvilken erklæring der er den næste, der skal udføres.
Klik på ikonet “Træd ind” på værktøjslinjen. Denne handling fortæller PHP-tolken at udføre udsagnet $s = 0
, og programtælleren flytter til den anden PHP-erklæring, som er den næste, der skal udføres.
fra hovedmenuen skal du vælge “Vindue →
fejlfinding →
variabler”. I det vindue, der vises, kan du se alle de variabler, der er angivet i hovedhukommelsen (RAM), og den værdi, de indeholder under hvert trin i udførelsen. Indtil nu er den eneste variabel, der er erklæret og tildelt en værdi, variablen $s
som vist i figur 5.
figur 5 værdien af variabel $s vises i vinduet variabler i debuggeren
Klik på ikonet “trin ind” værktøjslinje igen. Den anden erklæring udføres. Du kan gå tilbage til vinduet” Output ” og se outputresultatet (se figur 6).
figur 6 visning af en prompt i Outputvinduet
Klik på ikonet “Træd ind” værktøjslinje igen. Den tredje PHP-erklæring udføres, og programmet venter på, at du indtaster en værdi. Placer markøren inde i vinduet” Output”, skriv værdien 5, og tryk på” Enter larp ” – tasten.
programtælleren flytter til den fjerde PHP-erklæring. Hvis du går tilbage til vinduet “variabler”, kan du se, at i øjeblikket er to variabler ($a
og $s
) erklæret i hovedhukommelsen (RAM), som vist i Figur 7.
Figur 7 værdierne for variablerne $A og $s vises i vinduet variabler
Klik på ikonet “Træd ind” værktøjslinje to gange. Denne handling udfører den fjerde og femte PHP udsagn. Placer markøren inde i vinduet” Output”, skriv værdien 2, og tryk på” Enter larp ” – tasten.
programtælleren flytter til den sjette PHP-erklæring. Hvis du går tilbage til vinduet “variabler”, kan du se, at i øjeblikket er tre variabler ($a, $b
og $s
) erklæret i hovedhukommelsen (RAM) som vist i figur 8.
figur 8 værdierne for variabler $a, $b
og $s
vises i vinduet variabler
Klik på ikonet “Træd ind” værktøjslinje igen. Erklæringen $S = $a + $b
udføres. Hvad du forventede her var summen af 5 og 2, som er 7, der skulle tildeles variabel $s
. I stedet for dette erklæres en ny variabel $S
i hovedhukommelsen (RAM), og værdien 7 er tildelt den, som vist i figur 9.
figur 9 Alle deklarerede variabler vises i vinduet variabler i debuggeren
nu bliver det mere indlysende for dig! Du har fejlagtigt erklæret to variabler i hovedhukommelsen (RAM), variablen $s
og variablen $S
med et stort S. Så når strømmen af udførelse går til den sidste sætning, vises echo "The sum is: ", $s
værdien 0 i stedet for værdien 7.
du har lige fundet fejlen! Klik på ikonet” Afslut Debugger Session ” toolbar for at annullere udførelse, rette fejlen ved at ændre variabel $S
til $s
, og du er klar! Du har lige udført din første fejlretning! Re-udføre scriptet, og du vil nu se, at det beregner og viser summen korrekt.
fejlfinding af logiske fejl ved at tilføje breakpoints
fejlfinding trin for trin har en stor ulempe. Du skal klikke på” Træd ind ” værktøjslinjeikonet igen og igen, indtil du når den position, hvor fejlen kan være. Kan du forestille dig selv at gøre dette i et stort script?
for store scripts er der en anden tilgang. Hvis du har mistanke om, at fejlen er et sted i slutningen af scriptet, er der ikke behov for at fejle det hele lige fra starten. Du kan tilføje en markør (kaldet et “breakpoint”), hvor du tror, at fejlen kan være, udføre scriptet, og når strømmen af udførelse når det breakpoint, stopper strømmen af udførelse automatisk. Du kan derefter se nærmere på de aktuelle værdier for variablerne på den position, hvor scriptet blev sat på pause.
Bemærk: når scriptet holder pause, har du to muligheder for at genoptage udførelsen: du kan tilføje et andet breakpoint et sted nedenfor i scriptet, klikke på ikonet “Fortsæt” værktøjslinje og lade scriptet fortsætte udførelsen indtil det nye breakpoint; eller du kan bare bruge ikonet “trin ind” værktøjslinje og udføre scriptet trin for trin derefter.
det næste PHP-script beder brugeren om at indtaste to værdier og beregne deres gennemsnitlige værdi.
scriptet indeholder dog en logikfejl. Når brugeren indtaster værdierne 10 og 12, vises værdien 16 i stedet for 11.
<?php echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $average = $a + $b / 2; echo "The average value is: ", $average;?>
du har mistanke om, at problemet er et sted i slutningen af scriptet. Du ønsker dog ikke at debugge hele scriptet, men bare den del, hvor fejlen kan være. Så lad os prøve at tilføje et breakpoint på $average = $a + $b / 2
– erklæringen (se figur 10). Der er to måder at gøre dette på: du kan klikke i den venstre grå margen på det tilsvarende linjenummer, eller du kan placere markøren på interesselinjen og trykke på CTRL+F8-tastekombinationen.
Figur 10 tilføjelse af et breakpoint til et script
Bemærk: Du ved, at der er indstillet et breakpoint, når det lyserøde rektangel vises i den grå margen, og den tilsvarende linje har lyserød baggrund, der fremhæver det.
tryk CTRL+SHIFT+F5 for at starte debuggeren. Klik på ikonet” Fortsæt ” værktøjslinje, og indtast værdierne 10 og 12, Når du bliver bedt om det. Du vil bemærke, at lige efter at du har indtastet det andet nummer og ramt tasten “Enter prist”, stopper strømmen af udførelse ved breakpoint. (Du vil se, at den lyserøde breakpoint fremhævning erstattes af den grønne fremhævning af programtælleren.)
husk! Du kan debug en fil ved at vælge “Debug
→
Debug File” fra hovedmenuen eller ved at trykke på CTRL+SHIFT+F5 tastekombinationen.
nu kan du se nærmere på de aktuelle værdier af variablerne. Variabler $a
og $b
indeholder henholdsvis værdierne 10 og 12, som de burde, så der er ikke noget galt med datainputtet, som vist i Figur 11.
Figur 11 Visning af de aktuelle værdier for to variabler i vinduet variabler
Klik på ikonet “Træd ind” værktøjslinje En gang. Erklæringen $average = $a + $b / 2
udføres, og hovedhukommelsen (RAM) indeholder nu følgende værdier (Se figur 12).
Figur 12 Visning af de aktuelle værdier af tre variabler i vinduet variabler
der er det! Du har lige fundet udsagnet, der fejlagtigt tildeler en værdi på 16, i stedet for 11, til variablen $average
! Og nu kommer den vanskelige del; du bør overveje, hvorfor dette sker!
efter to dages tænkning bliver det indlysende! Du havde lige glemt at vedlægge $a + $b
indenfor parenteser; således blev kun variablen $b
divideret med 2. Klik på ikonet” Afslut Debugger Session ” værktøjslinje, fjern alle breakpoints, ret fejlen ved at omslutte $a + $b
indenfor parenteser, og du er klar! Re-udføre scriptet og se nu, at det beregner og viser den gennemsnitlige værdi korrekt.