PHP szkriptek hibakeresése NetBeans IDE
mint már tudjuk, amikor valaki magas szintű nyelven ír kódot, kétféle hibát követhet el-szintaktikai hibák és logikai hibák. A NetBeans IDE minden szükséges eszközt biztosít a szkriptek hibakereséséhez és a hibák megtalálásához.
szintaktikai hibák hibakeresése
szerencsére a NetBeans IDE gépelés közben észleli a szintaktikai hibákat, és az 1.ábrán látható hullámos piros vonallal aláhúzza azokat.
1. ábra a NetBeans IDE-ben a szintaktikai hibák egy hullámos piros vonallal vannak aláhúzva
mindössze annyit kell tennie, hogy kijavítja a megfelelő hibát, és a piros vonal azonnal eltűnik. Ha azonban nem biztos abban, hogy mi a baj a kóddal, akkor csak helyezze az egérmutatót a piros felkiáltójelre. A NetBeans IDE megpróbál segíteni egy felugró ablak megjelenítésével, a hiba rövid magyarázatával, amint az a 2.ábrán látható.
2. ábra a NetBeans IDE egy szintaktikai hiba magyarázatát mutatja
logikai hibák hibakeresése parancsfájlok lépésről lépésre történő végrehajtásával
a szintaktikai hibákhoz képest a logikai hibákat nehezebb megtalálni. Mivel a NetBeans IDE nem képes észrevenni és aláhúzni a logikai hibákat, teljesen egyedül vagy! Nézzük meg például a következő PHP szkriptet. Kéri a felhasználót, hogy írjon be két számot, és kiszámítja és megjeleníti azok összegét. Ez azonban logikai hibát tartalmaz!
<?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;?>
ha beírja ezt a szkriptet a NetBeans IDE-be, észreveszi, hogy még egy felkiáltójel sem jelzi a hibát. Ha azonban végrehajtja a szkriptet (SHIFT+F6), és beír két értéket, az 5-öt és a 2-t, akkor maga is láthatja, hogy annak ellenére, hogy az 5 és 2 összege 7, a NetBeans IDE ragaszkodik ahhoz, hogy nulla legyen, amint azt a 3.ábra mutatja.
3. ábra egy logikai hiba eredményének megtekintése a kimeneti ablakban
mi a fene folyik itt? Természetesen egy szakértő programozó számára a hiba kijavítása egy darab sütemény lenne. De neked, egy kezdő, annak ellenére, hogy keményen próbálkozol, nem találsz semmi rosszat. Szóval, hol van a hiba?
néha az emberi szem annyira elfárad, hogy nem látja a nyilvánvalót. Tehát próbáljunk meg varázslatot használni! Próbáljuk meg lépésről lépésre végrehajtani a szkriptet a hibakereső segítségével. Ez lehetőséget ad arra, hogy megfigyelje a végrehajtás folyamatát, és közelebbről megvizsgálja a változók aktuális értékeit az egyes lépésekben.
indítsa el a hibakeresőt a “Debug →
Debug File” kiválasztásával a főmenüből, vagy a CTRL+SHIFT+F5 billentyűkombináció megnyomásával. Ezzel engedélyezi a hibakeresőt, és több ikon jelenik meg az eszköztáron.
megjegyzés: a hibakereső (XDebug) engedélyezéséhez módosítania kell a PHP-t.ini fájl. További információ itt.
a programszámláló (a zöld nyíl ikon a szürke margón) megáll a szkript első sorában a 4.ábrán látható módon.
4. ábra a hibakereső használata a NetBeans IDE-ben
Megjegyzés: A programszámláló bármikor megmutatja, melyik utasítás a következő végrehajtandó.
kattintson a “lépés a” ikonra az eszköztáron. Ez a művelet arra utasítja a PHP tolmácsot, hogy hajtsa végre a $s = 0
utasítást, a programszámláló pedig a második PHP utasításra lép, amely a következő végrehajtásra kerül.
a főmenüből válassza az “ablak →
hibakeresés →
változók”lehetőséget. A megjelenő ablakban megnézheti a fő memóriában (RAM) deklarált összes változót, valamint az általuk tartalmazott értéket a végrehajtás minden lépése során. Eddig az egyetlen deklarált és hozzárendelt érték a $s
változó, amint azt az 5. ábra mutatja.
5. ábra A $ S változó értéke megjelenik a hibakereső változók ablakában
kattintson ismét a” lépj be ” eszköztár ikonra. A második utasítás végrehajtásra kerül. Visszatérhet a” kimenet ” ablakba, és megtekintheti a kimeneti eredményt (lásd a 6.ábrát).
6. ábra prompt megtekintése a kimeneti ablakban
kattintson ismét a” lépés a ” eszköztár ikonra. A harmadik PHP utasítás végrehajtásra kerül, és a program várja, hogy megadjon egy értéket. Helyezze a kurzort az ” Output “ablakba, írja be az 5 értéket, majd nyomja meg az” Enter enterprises ” gombot.
a programszámláló a negyedik PHP utasításra lép. Ha visszatérünk a “változók” ablakhoz, láthatjuk, hogy jelenleg két változó ($a
és $s
) van deklarálva a fő memóriában (RAM), amint azt a 7.ábra mutatja.
7. ábra a $A és $s változók értékei a változók ablakban jelennek meg
kattintson kétszer a” lépés a ” eszköztár ikonra. Ez a művelet végrehajtja a negyedik és ötödik PHP utasítást. Vigye a kurzort az ” Output “ablakba, írja be a 2 értéket, majd nyomja meg az” Enter enterprises ” gombot.
a programszámláló a hatodik PHP utasításra lép. Ha visszatérünk a “változók” ablakhoz, láthatjuk, hogy ebben a pillanatban három változó ($a, $b
és $s
) deklarálódik a fő memóriában (RAM) a 8.ábrán látható módon.
8. ábra a $a, $b
és $s
változók értékei a
változók ablakban jelennek meg, kattintson még egyszer a “lépés a” eszköztár ikonra. A $S = $a + $b
utasítás végrehajtásra kerül. Amit itt vártál, az 5 és 2 összege, ami 7, a $s
változóhoz rendelhető. Ehelyett egy új $S
változót deklarálnak a fő memóriában (RAM), és a 7 értéket rendelik hozzá, amint azt a 9.ábra mutatja.
9. ábra az összes deklarált változó megjelenik a hibakereső változók ablakában
most nyilvánvalóbbá válik számodra! Tévedésből két változót deklaráltál a fő memóriában (RAM), a $s
és a $S
nagybetűvel. Tehát, amikor a végrehajtás folyamata az utolsó utasításhoz megy, echo "The sum is: ", $s
a 0 érték jelenik meg a 7 érték helyett.
most találta meg a hibát! Kattintson a” Finish Debugger Session ” eszköztár ikonra a végrehajtás megszakításához, javítsa ki a hibát a $S
változó $s
változóra változtatásával, és készen áll! Most hajtotta végre az első hibakeresést! Hajtsa végre újra a szkriptet, és látni fogja, hogy helyesen számítja ki és jeleníti meg az összeget.
hibakeresés logikai hibák hozzáadásával töréspontok
hibakeresés lépésről lépésre van egy nagy hátránya. A eszköztár” lépés ” ikonjára kell kattintania újra és újra, amíg el nem éri a hiba helyét. El tudod képzelni magad, hogy ezt egy nagy forgatókönyvben csinálod?
a nagy szkriptek esetében van egy másik megközelítés. Ha arra gyanakszik, hogy a hiba valahol a szkript végén van, akkor nem kell az egészet a kezdetektől hibakeresni. Hozzáadhat egy jelölőt (úgynevezett “töréspontot”), ahol úgy gondolja, hogy a hiba lehet, végrehajtja a szkriptet, és amikor a végrehajtás folyamata eléri ezt a töréspontot, a végrehajtás folyamata automatikusan szünetel. Ezután közelebbről megnézheti a változók aktuális értékeit abban a helyzetben, ahol a szkript szünetelt.
megjegyzés: amikor a szkript szünetel, két lehetősége van a végrehajtás folytatására: hozzáadhat egy második töréspontot valahol a szkript alatt, kattintson a “Folytatás” eszköztár ikonra, és engedélyezheti a szkript végrehajtását az új töréspontig; vagy egyszerűen használhatja a “lépés a” eszköztár ikont, és ezt követően lépésről lépésre végrehajthatja a szkriptet.
a következő PHP szkript két érték megadására kéri a felhasználót, és kiszámítja azok átlagértékét.
a szkript azonban logikai hibát tartalmaz. Amikor a felhasználó beírja a 10 és 12 értékeket, a 16 érték jelenik meg a 11 helyett.
<?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;?>
gyanítja, hogy a probléma valahol a szkript végén van. Azonban nem a teljes szkriptet szeretné hibakeresni, hanem csak azt a részt, amelyben a hiba lehet. Tehát próbáljunk meg egy töréspontot hozzáadni a $average = $a + $b / 2
utasításhoz (lásd a 10.ábrát). Ennek két módja van: kattintson a bal oldali szürke margóra a megfelelő sorszámra, vagy helyezze a kurzort a kívánt sorra, és nyomja meg a CTRL+F8 billentyűkombinációt.
10. ábra töréspont hozzáadása egy szkripthez
Megjegyzés: tudja, hogy töréspont van beállítva, ha a rózsaszín téglalap jelenik meg a szürke margón, és a megfelelő sorban rózsaszín háttér kiemeli azt.
nyomja meg a CTRL+SHIFT+F5 billentyűkombinációt a hibakereső elindításához. Kattintson a” Folytatás ” eszköztár ikonra, és adja meg a 10 és 12 értéket, amikor kéri. Észre fogja venni, hogy közvetlenül a második szám beírása után, és nyomja meg az “Enter enterprises” gombot, a végrehajtás folyamata szünetel a töréspontnál. (Látni fogja, hogy a rózsaszín töréspont kiemelését a programszámláló zöld kiemelése váltja fel.)
Emlékezz! A fájl hibakereséséhez válassza a “Debug
→
Debug File” lehetőséget a főmenüből, vagy nyomja meg a CTRL+SHIFT+F5 billentyűkombinációt.
most közelebbről megnézheti a változók aktuális értékeit. Az $a
és $b
változók a 10, illetve a 12 értékeket tartalmazzák, ahogy kell, tehát nincs semmi baj az adatbevitellel, amint azt a 11.ábra mutatja.
11. ábra két változó aktuális értékeinek megtekintése a változók ablakban
kattintson egyszer a” lépj be ” eszköztár ikonra. A $average = $a + $b / 2
utasítás végrehajtásra kerül, és a fő memória (RAM) a következő értékeket tartalmazza (lásd a 12.ábrát).
12. ábra három változó aktuális értékeinek megtekintése a változók ablakban
itt van! Most találta meg azt az állítást, amely tévesen 16 értéket rendel a 11 helyett a $average
változóhoz! És most jön a nehéz rész; meg kell fontolnod, miért történik ez!
két napos gondolkodás után nyilvánvalóvá válik! Éppen elfelejtette zárójelbe tenni a $a + $b
értéket; így csak a $b
változót osztottuk el 2-vel. Kattintson a” Finish Debugger Session ” eszköztár ikonra, távolítsa el az összes töréspontot, javítsa ki a hibát a $a + $b
zárójelbe helyezésével, és készen áll! Hajtsa végre újra a szkriptet, és nézze meg most, hogy helyesen számítja ki és jeleníti meg az átlagértéket.