debugowanie skryptów PHP za pomocą NetBeans IDE
jak już wiesz, gdy ktoś pisze kod w języku wysokiego poziomu, mogą wystąpić dwa rodzaje błędów-Błędy składniowe i błędy logiczne. NetBeans IDE zapewnia wszystkie niezbędne narzędzia, które pomogą Ci debugować skrypty i znajdować błędy.
debugowanie błędów składniowych
na szczęście NetBeans IDE wykrywa błędy składniowe podczas pisania i podkreśla je falistą czerwoną linią, jak pokazano na rysunku 1.
Rysunek 1 w NetBeans IDE Błędy składniowe są podkreślone falistą czerwoną linią
wszystko, co musisz zrobić, to poprawić odpowiedni błąd, a czerwona linia zniknie natychmiast. Jeśli jednak nie jesteś pewien, co jest nie tak z kodem, możesz po prostu umieścić kursor myszy na czerwonym wykrzykniku. NetBeans IDE spróbuje ci pomóc, pokazując wyskakujące okno z krótkim wyjaśnieniem błędu, jak pokazano na rysunku 2.
Rysunek 2 IDE NetBeans pokazuje Wyjaśnienie błędu składni
debugowanie błędów logicznych przez wykonywanie skryptów krok po kroku
w porównaniu z błędami składni, błędy logiczne są trudniejsze do znalezienia. Ponieważ NetBeans IDE nie może wykryć i podkreślić błędów logicznych, jesteś sam! Spójrzmy na przykład na następujący skrypt PHP. To monituje użytkownika, aby wprowadzić dwie liczby i oblicza i wyświetla ich sumę. Zawiera jednak błąd logiczny!
<?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;?>
jeśli wpiszesz ten skrypt do IDE NetBeans, zauważysz, że nie ma nawet jednego wykrzyknika wskazującego na jakikolwiek błąd. Jeśli jednak wykonasz skrypt (SHIFT + F6) i wprowadzisz dwie wartości, 5 i 2, możesz zobaczyć na własne oczy, że mimo że suma 5 i 2 wynosi 7, NetBeans IDE upiera się, że jest to zero, Jak pokazano na rysunku 3.
Rysunek 3 Wyświetlanie wyniku błędu logicznego w oknie wyjściowym
co się do cholery dzieje? Oczywiście dla doświadczonego programisty naprawienie tego błędu byłoby bułką z masłem. Ale dla Ciebie, początkującego, nawet jeśli bardzo się starasz, nie znajdziesz nic złego. Więc gdzie jest błąd?
czasami ludzkie oczy są tak zmęczone, że nie widzą tego, co oczywiste. Spróbujmy więc użyć magii! Spróbujmy wykonać skrypt krok po kroku za pomocą debuggera. Daje to możliwość obserwowania przepływu wykonania i bliższego przyjrzenia się bieżącym wartościom zmiennych w każdym kroku.
Uruchom debugger, wybierając „Debug →
Debug File” z głównego menu lub naciskając kombinację klawiszy CTRL+SHIFT+F5. W ten sposób włączasz debugger i więcej ikon jest wyświetlanych na pasku narzędzi.
uwaga: aby włączyć debugger (XDebug), musisz zmodyfikować PHP.plik ini. Więcej informacji tutaj.
licznik programu (ikona zielonej strzałki na szarym marginesie) zatrzymuje się w pierwszej linii skryptu, jak pokazano na rysunku 4.
Rysunek 4 Używanie debuggera w NetBeans IDE
Uwaga: licznik programu pokazuje w dowolnym momencie, która instrukcja jest następna do wykonania.
kliknij ikonę „wejdź” na pasku narzędzi. Ta akcja nakazuje interpreterowi PHP wykonanie instrukcji $s = 0
, a program counter przechodzi do drugiej instrukcji PHP, która jest następną do wykonania.
z głównego menu wybierz „Okno →
debugowanie →
zmiennych”. W oknie, które się pojawi, możesz obserwować wszystkie zmienne zadeklarowane w pamięci głównej (RAM)i wartość, którą zawierają podczas każdego kroku wykonywania. Do tej pory jedyną zadeklarowaną i przypisaną wartością zmienną jest zmienna $s
, jak pokazano na rysunku 5.
Rysunek 5 wartość zmiennej $s jest wyświetlana w oknie zmiennych debuggera
ponownie kliknij ikonę „krok do” paska narzędzi. Wykonuje się drugie polecenie. Możesz wrócić do okna „wyjście” i zobaczyć wynik wyjściowy (patrz rysunek 6).
Rysunek 6 wyświetlanie monitu w oknie wyjściowym
ponownie kliknij ikonę paska narzędzi „krok do” . Trzecia Instrukcja PHP jest wykonywana i program czeka na wprowadzenie wartości. Umieść kursor w oknie „wyjście”, wpisz wartość 5 i naciśnij klawisz” Enter↵”.
licznik programu przechodzi do czwartej instrukcji PHP. Jeśli wrócisz do okna „zmienne”, zobaczysz, że w tej chwili dwie zmienne ($a
i $s
) są zadeklarowane w pamięci głównej (RAM), jak pokazano na rysunku 7.
Rysunek 7 wartości zmiennych $a i $S są wyświetlane w oknie zmiennych
Kliknij dwukrotnie ikonę paska narzędzi „krok do” . Ta akcja wykonuje czwarte i piąte polecenie PHP. Umieść kursor w oknie „wyjście”, wpisz wartość 2 i naciśnij klawisz” Enter↵”.
licznik programu przechodzi do szóstej instrukcji PHP. Jeśli wrócisz do okna „zmienne”, zobaczysz, że w tym momencie trzy zmienne ($a, $b
i $s
) są zadeklarowane w pamięci głównej (RAM), jak pokazano na rysunku 8.
Rysunek 8 wartości zmiennych $a, $b
i $s
są wyświetlane w oknie zmiennych
kliknij ponownie ikonę paska narzędzi „krok do” . Polecenie $S = $a + $b
jest wykonywane. Oczekiwałeś tutaj Sumy 5 i 2, czyli 7, które mają być przypisane do zmiennej $s
. Zamiast tego, nowa zmienna $S
jest zadeklarowana w pamięci głównej (RAM) i jest do niej przypisana wartość 7, Jak pokazano na rysunku 9.
Rysunek 9 wszystkie zadeklarowane zmienne są wyświetlane w oknie zmiennych debuggera
teraz staje się to dla ciebie bardziej oczywiste! Błędnie zadeklarowałeś dwie zmienne w pamięci głównej (RAM), zmienną $s
i zmienną $S
z dużym S. Tak więc, gdy przepływ wykonania przechodzi do ostatniej instrukcji, echo "The sum is: ", $s
wyświetlana jest wartość 0 zamiast wartości 7.
właśnie znalazłeś błąd! Kliknij ikonę paska narzędzi” Zakończ sesję debuggera ” , aby anulować wykonywanie, Popraw błąd, zmieniając zmienną $S
na $s
i jesteś gotowy! Właśnie wykonałeś swoje pierwsze debugowanie! Uruchom ponownie skrypt, a zobaczysz, że poprawnie oblicza i wyświetla sumę.
debugowanie błędów logicznych poprzez dodanie punktów przerwania
debugowanie krok po kroku ma dużą wadę. Musisz wielokrotnie klikać ikonę paska narzędzi „krok do” , aż dojdziesz do pozycji, w której może znajdować się błąd. Czy możesz sobie wyobrazić, że robisz to w dużym scenariuszu?
dla dużych skryptów istnieje inne podejście. Jeśli podejrzewasz, że błąd znajduje się gdzieś na końcu skryptu, nie ma potrzeby debugowania wszystkiego od samego początku. Możesz dodać znacznik (zwany” punktem przerwania”), w którym Twoim zdaniem może być błąd, wykonać skrypt, a gdy przepływ wykonania osiągnie ten punkt przerwania, przepływ wykonania zostanie automatycznie wstrzymany. Następnie możesz przyjrzeć się bliżej bieżącym wartościom zmiennych w miejscu, w którym skrypt został wstrzymany.
uwaga: gdy skrypt się zatrzyma, masz dwie opcje wznowienia wykonywania: możesz dodać drugi punkt przerwania gdzieś poniżej w skrypcie, kliknij ikonę „Kontynuuj” paska narzędzi i pozwól skryptowi kontynuować wykonywanie do tego nowego punktu przerwania; lub możesz po prostu użyć ikony „krok do” paska narzędzi i wykonać skrypt krok po kroku.
następny skrypt PHP prosi użytkownika o wprowadzenie dwóch wartości i obliczenie ich średniej wartości.
jednak skrypt zawiera błąd logiczny. Gdy użytkownik wprowadzi wartości 10 i 12, zostanie wyświetlona wartość 16 zamiast 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;?>
podejrzewasz, że problem jest gdzieś na końcu skryptu. Jednak nie chcesz debugować całego skryptu, ale tylko część, w której może być błąd. Spróbujmy więc dodać punkt przerwania w instrukcji $average = $a + $b / 2
(patrz rysunek 10). Można to zrobić na dwa sposoby: możesz kliknąć lewy szary margines na odpowiednim numerze linii lub możesz umieścić kursor w interesującej Cię linii i nacisnąć kombinację klawiszy CTRL+F8.
Rysunek 10 Dodawanie punktu przerwania do skryptu
Uwaga: wiesz, że punkt przerwania został ustawiony, gdy różowy prostokąt pojawia się na szarym marginesie, a odpowiednia linia ma różowe tło podświetlające go.
naciśnij CTRL+SHIFT+F5, aby uruchomić debugger. Kliknij ikonę paska narzędzi” Kontynuuj ” i wprowadź wartości 10 i 12 na żądanie. Zauważysz, że zaraz po wprowadzeniu drugiej liczby i naciśnięciu klawisza ” Enter ↵”, przepływ wykonania zatrzymuje się w punkcie przerwania. (Zobaczysz, że różowe podświetlenie punktu przerwania zostanie zastąpione zielonym podświetleniem licznika programu.)
pamiętaj! Możesz debugować plik, wybierając „Debug
→
Debug File” z głównego menu lub naciskając kombinację klawiszy CTRL+SHIFT+F5.
teraz możesz przyjrzeć się bliżej bieżącym wartościom zmiennych. Zmienne $a
i $b
zawierają odpowiednio wartości 10 i 12, tak jak powinny, więc nie ma nic złego w wprowadzaniu danych, jak pokazano na rysunku 11.
Rysunek 11 przeglądanie bieżących wartości dwóch zmiennych w oknie zmienne
Kliknij raz na ikonę paska narzędzi „krok do” . Polecenie $average = $a + $b / 2
wykonuje się, a pamięć główna (RAM) zawiera teraz następujące wartości (patrz rysunek 12).
Rysunek 12 przeglądanie bieżących wartości trzech zmiennych w oknie zmienne
jest! Właśnie znalazłeś polecenie, które błędnie przypisuje wartość 16 zamiast 11 zmiennej $average
! A teraz przychodzi trudna część; powinniście zastanowić się, dlaczego tak się dzieje!
po dwóch dniach myślenia staje się oczywiste! Po prostu zapomniałeś umieścić $a + $b
w nawiasach; tak więc tylko zmienna $b
została podzielona przez 2. Kliknij ikonę paska narzędzi” Zakończ sesję debuggera ” , usuń wszystkie punkty przerwania, Popraw błąd, załączając $a + $b
w nawiasach i jesteś gotowy! Ponownie uruchom skrypt i zobacz, że poprawnie oblicza i wyświetla średnią wartość.