ladění PHP skriptů pomocí NetBeans IDE

jak již víte, když někdo píše kód v jazyce na vysoké úrovni, mohou se vyskytnout dva typy chyb-chyby syntaxe a logické chyby— NetBeans IDE poskytuje všechny potřebné nástroje, které vám pomohou ladit skripty a najít chyby.

chyby ladění syntaxe

naštěstí NetBeans IDE detekuje chyby syntaxe během psaní a podtrhuje je vlnitou červenou čarou, jak je znázorněno na obrázku 1.

11

Obrázek 1 v NetBeans IDE jsou chyby syntaxe podtrženy vlnitou červenou čarou

vše, co musíte udělat, je opravit odpovídající chybu a červená čára zmizí najednou. Pokud si však nejste jisti, co je s vaším kódem špatné, stačí umístit kurzor myši na červený vykřičník. NetBeans IDE se vám pokusí pomoci zobrazením vyskakovacího okna se stručným vysvětlením chyby, jak je znázorněno na obrázku 2.

12

Obrázek 2 NetBeans IDE ukazuje vysvětlení chyby syntaxe

ladění logických chyb prováděním skriptů krok za krokem

ve srovnání s chybami syntaxe je obtížnější najít logické chyby. Vzhledem k tomu, že NetBeans IDE nemůže odhalit a zdůraznit logické chyby, jste všichni sami! Podívejme se například na následující PHP skript. Vyzve uživatele k zadání dvou čísel a vypočítá a zobrazí jejich součet. Obsahuje však logickou chybu!

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

pokud zadáte tento skript do IDE NetBeans, všimnete si, že neexistuje ani jeden vykřičník označující jakoukoli chybu. Pokud však spustíte skript (SHIFT + F6)a zadáte dvě hodnoty, 5 a 2, můžete sami vidět, že i když součet 5 a 2 je 7, NetBeans IDE trvá na tom, že je nula, jak je znázorněno na obrázku 3.

13

obrázek 3 zobrazení výsledku logické chyby ve výstupním okně

co se to sakra děje? Samozřejmě pro zkušeného programátora by oprava této chyby byla hračka. Ale pro vás, nováček, i když se snažíte tvrdě, nenajdete nic špatného. Takže, kde je chyba?

někdy jsou lidské oči tak unavené,že nevidí zřejmé. Zkusme tedy použít nějakou magii! Pokusíme se spustit skript krok za krokem pomocí debuggeru. To vám dává příležitost sledovat tok provádění a blíže se podívat na aktuální hodnoty proměnných v každém kroku.

spusťte debugger výběrem „Debug Debug File“ z hlavní nabídky nebo stisknutím kombinace kláves CTRL + SHIFT+F5. Tímto způsobem povolíte debugger a na panelu nástrojů se zobrazí další ikony.

netbeans_debug_toolbar

Upozornění: Chcete-li povolit debugger (XDebug), musíte upravit PHP.ini soubor. Více informací zde.

počítadlo programů (zelená šipka green_arrow ikona v šedém okraji) se zastaví na prvním řádku skriptu, jak je znázorněno na obrázku 4.

14

obrázek 4 Použití debuggeru v NetBeans IDE

upozornění: čítač programu vám kdykoli ukáže, který příkaz je další, který má být proveden.

klikněte na ikonu „krok do“ step_into_netbeans_icon na panelu nástrojů. Tato akce řekne interpretu PHP, aby provedl příkaz $s = 0, a počítadlo programu se přesune na druhý příkaz PHP, který je dalším, který má být proveden.

v hlavní nabídce vyberte „okno ladění proměnné“. V zobrazeném okně můžete sledovat všechny proměnné deklarované v hlavní paměti (RAM) a hodnotu, kterou obsahují během každého kroku provádění. Až dosud je jedinou proměnnou deklarovanou a přiřazenou hodnotou proměnná $s, jak je znázorněno na obrázku 5.

15

obrázek 5 hodnota proměnné $s je zobrazena v okně proměnných debuggeru

znovu klikněte na ikonu panelu nástrojů „Step into“ step_into_netbeans_icon. Druhé prohlášení je provedeno. Můžete se vrátit do okna „výstup“ a zobrazit výsledek výstupu (viz obrázek 6).

16

obrázek 6 zobrazení výzvy ve výstupním okně

klikněte znovu na ikonu panelu nástrojů „Step into“ step_into_netbeans_icon. Třetí příkaz PHP je spuštěn a program čeká na Zadání hodnoty. Umístěte kurzor do okna „výstup“, zadejte hodnotu 5 a stiskněte klávesu“ Enter↵“.

čítač programů se přesune na čtvrtý příkaz PHP. Pokud se vrátíte do okna „proměnné“, můžete vidět, že v současné době jsou v hlavní paměti (RAM) deklarovány dvě proměnné ($a a $s), jak je znázorněno na obrázku 7.

17

Obrázek 7 hodnoty proměnných $a A $S jsou zobrazeny v okně proměnných

dvakrát klikněte na ikonu panelu nástrojů „krok do“ step_into_netbeans_icon. Tato akce provede čtvrtý a pátý příkaz PHP. Umístěte kurzor do okna „výstup“, zadejte hodnotu 2 a stiskněte klávesu“ Enter↵“.

čítač programů se přesune na šestý příkaz PHP. Pokud se vrátíte do okna „proměnné“, uvidíte, že v tuto chvíli jsou v hlavní paměti (RAM) deklarovány tři proměnné ($a, $b a $s), jak je znázorněno na obrázku 8.

18

Obrázek 8 hodnoty proměnných $a, $b a $s jsou zobrazeny v okně proměnných

znovu klikněte na ikonu panelu nástrojů“ krok do “ step_into_netbeans_icon. Příkaz $S = $a + $b je proveden. Očekávali jste, že součet 5 a 2, což je 7, bude přiřazen proměnné $s. Namísto toho je v hlavní paměti (RAM) deklarována nová proměnná $S a je jí přiřazena hodnota 7, Jak je znázorněno na obrázku 9.

19

obrázek 9 všechny deklarované proměnné jsou zobrazeny v okně proměnné debuggeru

nyní je to pro vás jasnější! Omylem jste deklarovali dvě proměnné v hlavní paměti (RAM), proměnnou $s a proměnnou $S s velkým S. Když tedy tok provádění přejde na poslední příkaz, zobrazí se echo "The sum is: ", $s hodnota 0 místo hodnoty 7.

právě jste našli chybu! Kliknutím na ikonu panelu nástrojů“ dokončit Debugger Session “ finish_debugger_netbeans zrušíte spuštění, opravíte chybu změnou proměnné $S na $s a jste připraveni! Právě jste provedli své první ladění! Znovu spusťte skript a nyní uvidíte, že vypočítává a zobrazuje součet správně.

ladění logických chyb přidáním zarážek

ladění krok za krokem má velkou nevýhodu. Musíte znovu a znovu kliknout na ikonu panelu nástrojů „Step into“ step_into_netbeans_icon, dokud nedosáhnete pozice, kde by mohla být chyba. Dokážete si představit, že to děláte ve velkém scénáři?

pro velké skripty existuje jiný přístup. Pokud máte podezření, že chyba je někde na konci skriptu, není třeba ji ladit hned od začátku. Můžete přidat značku (nazývanou „zarážka“), kde si myslíte,že chyba může být, spusťte skript a když tok provádění dosáhne tohoto bodu zlomu, tok provádění se automaticky pozastaví. Poté se můžete blíže podívat na aktuální hodnoty proměnných v pozici, kde byl skript pozastaven.

upozornění: když se skript pozastaví, máte dvě možnosti pro obnovení provádění: můžete přidat druhý bod přerušení někde níže ve skriptu, kliknout na ikonu panelu nástrojů „pokračovat“ continue_debug_toolbar a povolit skriptu pokračovat v provádění až do tohoto nového bodu přerušení; nebo můžete použít ikonu panelu nástrojů „krok do“ step_into_netbeans_icon a poté spustit skript krok za krokem.

následující PHP skript vyzve uživatele k zadání dvou hodnot a vypočítá jejich průměrnou hodnotu.

skript však obsahuje logickou chybu. Když uživatel zadá hodnoty 10 a 12, zobrazí se hodnota 16 MÍSTO 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;?>

máte podezření, že problém je někde na konci skriptu. Nechcete však ladit celý skript, ale pouze část, ve které může být chyba. Zkusme tedy přidat bod zlomu do příkazu $average = $a + $b / 2 (viz obrázek 10). Existují dva způsoby, jak to udělat: můžete kliknout v levém šedém okraji na odpovídající číslo řádku, nebo můžete umístit kurzor na řádek zájmu a stisknout kombinaci kláves CTRL+F8.

obrázek 10 přidání zarážky do skriptu

upozornění: víte, že zarážka byla nastavena, když se růžový obdélník ping_rectangle_netbeans objeví v šedém okraji a odpovídající řádek má růžové pozadí, které jej zvýrazňuje.

stisknutím kláves CTRL + SHIFT+F5 spusťte debugger. Klikněte na ikonu panelu nástrojů „pokračovat“ continue_debug_toolbar a na požádání zadejte hodnoty 10 a 12. Všimnete si, že hned po zadání druhého čísla a stisknutí klávesy „Enter ↵“ se tok provádění zastaví v bodě zlomu. (Uvidíte, že růžové zvýraznění bodu zlomu je nahrazeno zeleným zvýrazněním počítadla programu.)

Pamatuj! Soubor můžete ladit výběrem možnosti „Debug Debug File“ z hlavní nabídky nebo stisknutím kombinace kláves CTRL + SHIFT+F5.

nyní se můžete blíže podívat na aktuální hodnoty proměnných. Proměnné $a a $b obsahují hodnoty 10 a 12, jak by měly, takže se vstupem dat není nic špatného, jak je znázorněno na obrázku 11.

21

obrázek 11 Zobrazení aktuálních hodnot dvou proměnných v okně proměnné

klikněte jednou na ikonu panelu nástrojů“ krok do “ step_into_netbeans_icon. Příkaz $average = $a + $b / 2 se spustí a hlavní paměť (RAM) nyní obsahuje následující hodnoty (viz Obrázek 12).

22

Obrázek 12 zobrazení aktuálních hodnot tří proměnných v okně proměnné

je to tady! Právě jste našli příkaz, který chybně přiřadí hodnotu 16 MÍSTO 11 proměnné $average! A teď přichází obtížná část; měli byste zvážit, proč se to stane!

po dvou dnech přemýšlení Je zřejmé! Právě jste zapomněli uzavřít $a + $b uvnitř závorek; pouze proměnná $b byla tedy dělena 2. Klikněte na ikonu panelu nástrojů“ dokončit Debugger Session “ finish_debugger_netbeans, odstraňte všechny zarážky, Opravte chybu uzavřením $a + $b uvnitř závorek a jste připraveni! Znovu spusťte skript a uvidíte, že vypočítává a zobrazuje průměrnou hodnotu správně.

Leave a Reply

Vaše e-mailová adresa nebude zveřejněna.