Debugging PHP Scripts with NetBeans IDE
după cum știți deja, atunci când cineva scrie cod într-un limbaj de nivel înalt, există două tipuri de erori pe care le—ar putea face-erori de sintaxă și erori logice. NetBeans IDE oferă toate instrumentele necesare pentru a vă ajuta să depanați scripturile și să găsiți Erorile.
depanare erori de sintaxă
din fericire, NetBeans IDE detectează erori de sintaxă în timp ce tastați și le subliniază cu o linie roșie ondulată așa cum se arată în Figura 1.
Figura 1 în IDE NetBeans, erorile de sintaxă sunt subliniate cu o linie roșie ondulată
tot ce trebuie să faceți este să corectați eroarea corespunzătoare și linia roșie va dispărea imediat. Cu toate acestea, dacă nu sunteți sigur de ceea ce este în neregulă cu codul dvs., puteți plasa cursorul mouse-ului pe semnul de exclamare roșu. NetBeans IDE va încerca să vă ajute afișând o fereastră pop-up cu o scurtă explicație a erorii, așa cum se arată în Figura 2.
Figura 2 NetBeans IDE prezintă o explicație a unei erori de sintaxă
depanare erori logice prin executarea scripturilor pas cu pas
comparativ cu erorile de sintaxă, erorile logice sunt mai greu de găsit. Deoarece NetBeans IDE nu poate identifica și sublinia erorile logice, sunteți singuri! Să ne uităm la următorul script PHP, de exemplu. Acesta solicită utilizatorului să introducă două numere și calculează și afișează suma lor. Cu toate acestea, conține o eroare logică!
<?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;?>
dacă tastați acest script în IDE NetBeans, veți observa că nu există nici măcar un semn de exclamare care să indice vreo eroare. Dacă executați scriptul (SHIFT+F6) și introduceți două valori, 5 și 2, puteți vedea pentru dvs. că, deși suma 5 și 2 este 7, NetBeans IDE insistă că este zero, așa cum se arată în Figura 3.
Figura 3 vizualizarea rezultatului unei erori logice în fereastra de ieșire
ce naiba se întâmplă? Desigur, pentru un programator expert, corectarea acestei erori ar fi o bucată de tort. Dar pentru tine, unul novice, chiar dacă încerci din greu, nu găsești nimic în neregulă. Deci, unde este eroarea?
uneori ochii umani obosesc atât de mult încât nu pot vedea ceea ce este evident. Deci, să încercăm să folosim niște magie! Să încercăm să executăm scriptul pas cu pas folosind depanatorul. Acest lucru vă oferă posibilitatea de a observa fluxul de execuție și de a examina mai atent valorile curente ale variabilelor din fiecare pas.
porniți depanatorul selectând „Debug →
Debug File” din meniul principal sau apăsând combinația de taste CTRL+SHIFT+F5. Procedând astfel, activați depanatorul și mai multe pictograme sunt afișate pe bara de instrumente.
observație: pentru a activa depanatorul (XDebug), trebuie să modificați PHP.fișier ini. Mai multe informații aici.
contorul programului (pictograma săgeată verde din marginea gri) se oprește la prima linie a scriptului așa cum se arată în Figura 4.
Figura 4 Utilizarea depanatorului în NetBeans IDE
observație: contorul programului vă arată, în orice moment, care este următoarea declarație care urmează să fie executată.
Faceți clic pe pictograma „pas în” din bara de instrumente. Această acțiune îi spune interpretului PHP să execute instrucțiunea $s = 0
, iar contorul de programe trece la a doua instrucțiune PHP, care este următoarea executată.
din meniul principal, selectați „Fereastră →
depanare →
variabile”. În fereastra care apare, puteți urmări toate variabilele declarate în memoria principală (RAM) și valoarea pe care o conțin în fiecare etapă de execuție. Până în prezent, singura variabilă declarată și atribuită unei valori este variabila $s
așa cum se arată în Figura 5.
Figura 5 valoarea variabilei $s este afișată în fereastra variabile a depanatorului
Faceți clic din nou pe pictograma barei de instrumente „pas în” . A doua declarație este executată. Puteți reveni la fereastra” ieșire ” și puteți vedea rezultatul ieșirii (a se vedea Figura 6).
Figura 6 vizualizarea unui prompt în fereastra de ieșire
Faceți clic din nou pe pictograma barei de instrumente „pas în” . A treia declarație PHP este executată și programul vă așteaptă să introduceți o valoare. Plasați cursorul în fereastra” ieșire”, tastați valoarea 5 și apăsați tasta” Enter inktokt”.
contorul programului trece la a patra instrucțiune PHP. Dacă reveniți la fereastra” variabile ” puteți vedea că, în acest moment, două variabile ($a
și $s
) sunt declarate în memoria principală (RAM), așa cum se arată în Figura 7.
Figura 7 valorile variabilelor $a și $s sunt afișate în fereastra variabile
Faceți clic de două ori pe pictograma barei de instrumente „pas în” . Această acțiune execută a patra și a cincea declarație PHP. Plasați cursorul în fereastra” ieșire”, tastați valoarea 2 și apăsați tasta” Enter inktokt”.
contorul programului trece la a șasea instrucțiune PHP. Dacă reveniți la fereastra” variabile ” puteți vedea că, în acest moment, trei variabile ($a, $b
și $s
) sunt declarate în memoria principală (RAM) așa cum se arată în Figura 8.
figura 8 valorile variabilelor $a, $b
și $s
sunt afișate în fereastra variabile
Faceți clic din nou pe pictograma barei de instrumente „pas în” . Declarația $S = $a + $b
este executată. Ceea ce v-ați așteptat aici a fost suma dintre 5 și 2, care este 7, care va fi atribuită variabilei $s
. În loc de aceasta, o nouă variabilă $S
este declarată în memoria principală (RAM) și valoarea 7 este atribuită acesteia, așa cum se arată în Figura 9.
Figura 9 toate variabilele declarate sunt afișate în fereastra variabile a depanatorului
acum devine mai evident pentru tine! Ați declarat din greșeală două variabile în memoria principală (RAM), variabila $s
și variabila $S
cu majusculă S. Deci, când fluxul de execuție trece la ultima instrucțiune, echo "The sum is: ", $s
este afișată valoarea 0 în loc de valoarea 7.
tocmai ați găsit eroarea! Faceți clic pe pictograma barei de instrumente” Finish Debugger Session ” pentru a anula execuția, corectați eroarea schimbând variabila $S
în $s
și sunteți gata! Tocmai ați efectuat prima depanare! Re-executați scriptul și veți vedea acum că calculează și afișează corect suma.
depanare erori logice prin adăugarea de puncte de întrerupere
depanare pas cu pas are un dezavantaj mare. Trebuie să faceți clic din nou și din nou pe pictograma barei de instrumente „pas în” până când ajungeți în poziția în care ar putea fi eroarea. Vă puteți imagina că faceți acest lucru într-un scenariu mare?
pentru scripturile mari există o altă abordare. Dacă bănuiți că eroarea este undeva la sfârșitul scriptului, nu este nevoie să depanați totul chiar de la început. Puteți adăuga un marker (numit „punct de întrerupere”) unde credeți că ar putea fi eroarea, executați scriptul și când fluxul de execuție atinge acel punct de întrerupere, fluxul de execuție se va întrerupe automat. Apoi, puteți arunca o privire mai atentă asupra valorilor curente ale variabilelor în poziția în care scriptul a fost întrerupt.
observație: când scriptul se întrerupe, aveți două opțiuni pentru reluarea execuției: puteți adăuga un al doilea punct de întrerupere undeva mai jos în script, faceți clic pe pictograma „continuare” bara de instrumente și permiteți scriptului să continue executarea până la acel nou punct de întrerupere; sau, puteți utiliza doar pictograma „pas în” bara de instrumente și executați scriptul pas cu pas ulterior.
următorul script PHP solicită utilizatorului să introducă două valori și calculează valoarea medie a acestora.
cu toate acestea, scriptul conține o eroare logică. Când utilizatorul introduce valorile 10 și 12, este afișată valoarea 16, în loc de 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;?>
bănuiți că problema este undeva la sfârșitul scriptului. Cu toate acestea, nu doriți să depanați întregul script, ci doar porțiunea în care ar putea fi eroarea. Deci, să încercăm să adăugăm un punct de întrerupere la instrucțiunea $average = $a + $b / 2
(vezi Figura 10). Există două moduri de a face acest lucru: puteți face clic în marginea gri stângă a numărului de linie corespunzător sau puteți plasa cursorul la linia de interes și puteți apăsa combinația de taste CTRL+F8.
Figura 10 adăugarea unui punct de întrerupere la un script
observație: știți că un punct de întrerupere a fost setat atunci când dreptunghiul roz apare în marginea gri și linia corespunzătoare are fundal roz evidențiindu-l.
apăsați CTRL+SHIFT+F5 pentru a porni depanatorul. Faceți clic pe pictograma barei de instrumente” continuați ” și introduceți valorile 10 și 12 atunci când vi se solicită. Veți observa că imediat după introducerea celui de-al doilea număr și apăsarea tastei „Enter inktokt”, fluxul de execuție se oprește la punctul de întrerupere. (Veți vedea că evidențierea punctului de întrerupere roz este înlocuită de evidențierea verde a contorului programului.)
amintiți-vă! Puteți depana un fișier selectând” Debug
→
Debug File ” din meniul principal sau apăsând combinația de taste CTRL+SHIFT+F5.
acum Puteți arunca o privire mai atentă asupra valorilor curente ale variabilelor. Variabilele $a
și $b
conțin valorile 10 și respectiv 12, așa cum ar trebui, deci nu este nimic în neregulă cu introducerea datelor, așa cum se arată în Figura 11.
Figura 11 vizualizarea valorilor curente ale două variabile în fereastra variabile
Faceți clic o dată pe pictograma barei de instrumente „pas în” . Instrucțiunea $average = $a + $b / 2
execută și memoria principală (RAM) conține acum următoarele valori (a se vedea Figura 12).
Figura 12 vizualizarea valorilor curente ale trei variabile în fereastra variabile
acolo este! Tocmai ați găsit afirmația care atribuie în mod eronat o valoare de 16, în loc de 11, variabilei $average
! Și acum vine partea dificilă; ar trebui să vă gândiți de ce se întâmplă acest lucru!
după două zile de gândire, devine evident! Tocmai uitaserăți să încadrați $a + $b
între paranteze; astfel, numai variabila $b
a fost împărțită la 2. Faceți clic pe pictograma barei de instrumente” Finish Debugger Session ” , eliminați toate punctele de întrerupere, corectați eroarea anexând $a + $b
între paranteze și sunteți gata! Re-executați scriptul și vedeți acum că calculează și afișează corect valoarea medie.