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.

11

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ó.

12

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.

13

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.

netbeans_debug_toolbar

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 green_arrow ikon a szürke margón) megáll a szkript első sorában a 4.ábrán látható módon.

14

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” step_into_netbeans_icon 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.

15

5. ábra A $ S változó értéke megjelenik a hibakereső változók ablakában

kattintson ismét a” lépj be ” step_into_netbeans_icon 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).

16

6. ábra prompt megtekintése a kimeneti ablakban

kattintson ismét a” lépés a ” step_into_netbeans_icon 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.

17

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 ” step_into_netbeans_icon 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.

18

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” step_into_netbeans_icon 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 $svá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.

19

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 ” finish_debugger_netbeans 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 step_into_netbeans_icon 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” continue_debug_toolbar 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” step_into_netbeans_icon 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 ping_rectangle_netbeans 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 ” continue_debug_toolbar 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.

21

11. ábra két változó aktuális értékeinek megtekintése a változók ablakban

kattintson egyszer a” lépj be ” step_into_netbeans_icon 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).

22

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 $averagevá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 ” finish_debugger_netbeans 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.

Leave a Reply

Az e-mail-címet nem tesszük közzé.