felsökning av PHP-skript med NetBeans IDE

som du redan vet, när någon skriver kod på ett högnivåspråk finns det två typer av fel som han eller hon kan göra—syntaxfel och logikfel. NetBeans IDE ger alla nödvändiga verktyg för att hjälpa dig felsöka dina skript och hitta felen.

felsökning syntaxfel

lyckligtvis upptäcker NetBeans IDE syntaxfel medan du skriver och understryker dem med en vågig röd linje som visas i Figur 1.

11

Figur 1 i NetBeans IDE understryks syntaxfel med en vågig röd linje

allt du behöver göra är att korrigera motsvarande fel och den röda linjen försvinner på en gång. Men om du inte är säker på vad som är fel med din kod kan du bara placera muspekaren på det röda utropstecknet. NetBeans IDE kommer att försöka hjälpa dig genom att visa ett popup-fönster med en kort förklaring av felet, som visas i Figur 2.

12

Figur 2 NetBeans IDE visar en förklaring av ett syntaxfel

felsöka logikfel genom att köra skript steg för steg

jämfört med syntaxfel är logikfel svårare att hitta. Eftersom NetBeans IDE inte kan upptäcka och understryka logiska fel är du ensam! Låt oss titta på följande PHP-skript, till exempel. Det uppmanar användaren att ange två siffror och beräknar och visar deras summa. Det innehåller dock ett logiskt fel!

<?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;?>

om du skriver detta skript i NetBeans IDE kommer du att märka att det inte ens finns ett utropstecken som indikerar något fel. Om du kör skriptet (SHIFT + F6) och anger två värden, 5 och 2, kan du själv se att även om summan av 5 och 2 är 7, insisterar NetBeans IDE att det är noll, som visas i Figur 3.

13

Figur 3 visar resultatet av ett logikfel i Utmatningsfönstret

Vad är det som händer? Naturligtvis för en expertprogrammerare skulle korrigering av detta fel vara en bit kaka. Men för dig, en nybörjare, även om du försöker hårt hittar du inget fel. Så var är felet?

ibland blir mänskliga ögon så trötta att de inte kan se det uppenbara. Så, låt oss försöka använda lite magi! Låt oss försöka utföra skriptet steg för steg med felsökaren. Detta ger Dig möjlighet att observera exekveringsflödet och titta närmare på de aktuella värdena för variabler i varje steg.

starta felsökaren genom att välja ”Debug Debug File” från huvudmenyn eller genom att trycka på CTRL+SHIFT+F5-tangentkombinationen. Genom att göra detta aktiverar du felsökaren och fler ikoner visas i verktygsfältet.

netbeans_debug_toolbar

Observera: för att aktivera felsökaren (XDebug) måste du ändra PHP.INI-fil. Mer information här.

programräknaren (den gröna pilen green_arrow – ikonen i den grå marginalen) stannar vid den första raden i skriptet som visas i Figur 4.

14

Figur 4 använda felsökaren i NetBeans IDE

meddelande: programräknaren visar när som helst vilket uttalande som ska köras nästa gång.

klicka på ikonen” Kliv in ” step_into_netbeans_icon i verktygsfältet. Denna åtgärd berättar för PHP-tolken att utföra uttalandet $s = 0, och programräknaren flyttar till det andra PHP-uttalandet, vilket är nästa som ska köras.

från huvudmenyn väljer du”Fönster felsökning variabler”. I fönstret som visas kan du titta på alla variabler som deklareras i huvudminnet (RAM) och värdet de innehåller under varje körningssteg. Hittills är den enda variabeln som deklarerats och tilldelats ett värde variabeln $s som visas i Figur 5.

15

Figur 5 värdet på variabeln $S visas i Variabelfönstret i felsökaren

klicka på ikonen ”steg in” step_into_netbeans_icon verktygsfält igen. Det andra uttalandet utförs. Du kan gå tillbaka till fönstret” Output ” och se utmatningsresultatet (se Figur 6).

16

Figur 6 visa en prompt i utmatningsfönstret

klicka på ikonen” Kliv in ” step_into_netbeans_icon verktygsfält igen. Det tredje PHP-uttalandet körs och programmet väntar på att du anger ett värde. Placera markören inuti” Output ”- fönstret, Skriv värdet 5 och tryck på” Enter asian ” – tangenten.

programräknaren flyttar till det fjärde PHP-uttalandet. Om du går tillbaka till fönstret ”variabler” kan du se att för närvarande deklareras två variabler ($a och $s) i huvudminnet (RAM), som visas i Figur 7.

17

Figur 7 värdena för variablerna $a och $s visas i Variabelfönstret

klicka på ikonen” steg in ” step_into_netbeans_icon verktygsfält två gånger. Denna åtgärd utför den fjärde och femte PHP-uttalandena. Placera markören inuti” Output ”- fönstret, Skriv värdet 2 och tryck på” Enter asian ” – tangenten.

programräknaren flyttar till det sjätte PHP-uttalandet. Om du går tillbaka till fönstret ”variabler” kan du se att för närvarande deklareras tre variabler ($a, $b och $s) i huvudminnet (RAM) som visas i Figur 8.

18

figur 8 värdena för variablerna $a, $b och $s visas i Variabelfönstret

klicka på ikonen” steg in ” step_into_netbeans_icon verktygsfält igen. Uttalandet $S = $a + $b utförs. Vad du förväntade dig här var summan av 5 och 2, vilket är 7, som ska tilldelas variabel $s. Istället för detta deklareras en ny variabel $S i huvudminnet (RAM) och värdet 7 tilldelas det, som visas i Figur 9.

19

Figur 9 Alla deklarerade variabler visas i Variabelfönstret i felsökaren

nu blir det mer uppenbart för dig! Du förklarade felaktigt två variabler i huvudminnet( RAM), variabeln $s och variabeln $S med ett kapital S. Så när exekveringsflödet går till det sista uttalandet visas echo "The sum is: ", $s värdet 0 istället för värdet 7.

du har just hittat felet! Klicka på ikonen” Slutför Debugger Session ” finish_debugger_netbeans verktygsfält för att avbryta körning, korrigera felet genom att ändra variabel $S till $s, och du är redo! Du utförde just din första felsökning! Kör om skriptet så ser du nu att det beräknar och visar summan korrekt.

Felsökningslogikfel genom att lägga till brytpunkter

felsökning steg för steg har en stor nackdel. Du måste klicka på ikonen” steg in ” step_into_netbeans_icon verktygsfält om och om igen tills du når den position där felet kan vara. Kan du tänka dig att göra detta i ett stort manus?

för stora skript finns det ett annat tillvägagångssätt. Om du misstänker att felet är någonstans i slutet av skriptet behöver du inte felsöka allt från början. Du kan lägga till en markör (kallad ”brytpunkt”) där du tror att felet kan vara, exekvera skriptet och när exekveringsflödet når den brytpunkten, kommer exekveringsflödet att pausa automatiskt. Du kan sedan titta närmare på de aktuella värdena för variablerna i den position där skriptet pausades.

observera: när skriptet pausar har du två alternativ för att återuppta körningen: du kan lägga till en andra Brytpunkt någonstans nedan i skriptet, klicka på ”Fortsätt” continue_debug_toolbar verktygsfältikonen och låta skriptet fortsätta exekveringen tills den nya brytpunkten; eller du kan bara använda ”steg in” step_into_netbeans_icon verktygsfältikonen och köra skriptet steg för steg därefter.

nästa PHP-skript uppmanar användaren att ange två värden och beräknar deras medelvärde.

skriptet innehåller dock ett logikfel. När användaren anger värdena 10 och 12 visas värdet 16 istället för 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 misstänker att problemet är någonstans i slutet av skriptet. Du vill dock inte felsöka hela skriptet, utan bara den del där felet kan vara. Så, låt oss försöka lägga till en brytpunkt vid $average = $a + $b / 2 – uttalandet (se Figur 10). Det finns två sätt att göra detta: du kan klicka i den vänstra gråmarginalen på motsvarande radnummer, eller du kan placera markören på raden av intresse och slå CTRL+F8-tangentkombinationen.

Figur 10 lägga till en brytpunkt i ett skript

Observera: Du vet att en brytpunkt har ställts in när den rosa rektangeln ping_rectangle_netbeans visas i den grå marginalen och motsvarande rad har rosa bakgrund som markerar den.

tryck CTRL + Skift + F5 för att starta felsökaren. Klicka på ikonen” Fortsätt ” continue_debug_toolbar verktygsfält och ange värdena 10 och 12 på begäran. Du kommer att märka att strax efter att du har skrivit in det andra numret och trycker på ”Enter Macau” – tangenten, pausar körningsflödet vid brytpunkten. (Du kommer att se att den rosa brytpunktsmarkeringen ersätts av den gröna markeringen av programräknaren.)

kom ihåg! Du kan felsöka en fil genom att välja ”Debug Debug File” från huvudmenyn eller genom att trycka på CTRL+SHIFT+F5 tangentkombinationen.

nu kan du titta närmare på de aktuella värdena för variablerna. Variablerna $a och $b innehåller värdena 10 respektive 12, som de borde, så det är inget fel med datainmatningen, som visas i Figur 11.

21

Figur 11 visa de aktuella värdena för två variabler i Variabelfönstret

klicka på ikonen ”steg in” step_into_netbeans_icon verktygsfält en gång. Uttalandet $average = $a + $b / 2 körs och huvudminnet (RAM) innehåller nu följande värden (se Figur 12).

22

Figur 12 visa de aktuella värdena för tre variabler i Variabelfönstret

där är det! Du hittade just uttalandet som felaktigt tilldelar ett värde på 16, istället för 11, till variabeln $average! Och nu kommer den svåra delen; Du bör överväga varför detta händer!

efter två dagars tänkande blir det uppenbart! Du hade just glömt att bifoga $a + $b inom parentes; således var endast variabeln $b dividerad med 2. Klicka på ikonen” Slutför Debugger Session ” finish_debugger_netbeans verktygsfält, ta bort alla brytpunkter, korrigera felet genom att bifoga $a + $b inom parentes och du är redo! Kör om skriptet och se nu att det beräknar och visar medelvärdet korrekt.

Leave a Reply

Din e-postadress kommer inte publiceras.