Debugowanie kodu to usuwanie błędów. Błędy mogą być syntaktyczne, semantyczne i logiczne. To te pierwsze są wykrywane przez interpreter PHP i to te będą tematem tego artykułu. Debugowanie kodu to naturalna cześć każdego projektu i nie inaczej jest z projektami WordPress, które są aplikacją PHP – i to nie ważne jak bardzo go skomplikujemy lub jakich technologii użyjemy do zbudowania front-endu. Pod maską zawsze jest PHP.
Język ten posiada własne metody pozwalające na jego debugowanie a te krótko opisałem w kursie PHP – podstawy programowania. WordPress zawiera specjalne systemy debugowania, które mają w założeniu upraszczać i ujednolicać kod w rdzenu, wtyczkach i motywach. W tym artykule przyjrzymy się różnym narzędziom, które pozwalają debugować kod pisanych wtyczek i motywów oraz zwiększyć jego ogólną jakość.
Spis treści:
Opcje debugowania w WordPressie
Plik wp-config.php zawiera podstawowe dane o środowisku i konfiguracje dzięki czemu strona WordPress może w ogóle działać. Nic dziwnego, że to w tym pliku możemy sterować różnymi opcjami, które pozwalają kontrolować reagowanie WordPressa na błędy.
Tryb debugowania WP_DEBUG
WP_DEBUG to stała PHP (stała zmienna globalna), której można użyć do uruchomienia trybu „debugowania” w całym WordPressie. Domyślnie jest to wartość false i to taka wartość znajduje się na świeżo zainstalowanej stronie WordPress. Wartość true ustawiamy w kopiach deweloperskich i w stagingu.
define ( 'WP_DEBUG', true );
Jeżeli koniecznie musimy, to ustawiamy taką wartość na produkcji tylko tymczasowo – kiedy naprawiamy krytyczny błąd lub nie dysponujemy aktualnie deweloperską wersją strony.
Błędy, ostrzeżenia i wskazówki PHP
Włączenie trybu debugowania w WordPressie spowoduje, że błędy PHP, ostrzeżenia a także powiadomienia z kompilatora będą wyświetlone bezpośrednio na stronie internetowej. To zmienia domyślnie działanie PHP, który w przypadku poważnych błędów zwróci błąd 500 lub nie wyświetli się nic. Zobaczymy wówczas tzw. biały ekran śmierci (ang. white screen of death).
Pokazywanie wszystkich powiadomień i ostrzeżeń PHP często skutkuje komunikatami o błędach, które choć nie są krytyczne to nie przestrzegają właściwych konwencji walidowania danych w PHP. Niedociągnięcia te, można łatwo naprawić po znalezieniu odpowiedniego kodu – co jest łatwe w trybie deweloperskim, bo w opisie błędu uzyskamy szczegółowe wskazówki gdzie jest błąd wliczając w to nazwę i ścieżkę do skryptu a nie rzadko także numer linii. Wynikowy kod jest przez to bardziej odporny na błędy i łatwiejszy w utrzymaniu, bo będzie zgodny z najnowszymi aktualizacjami rdzenia i pozostałych wtyczek.
Przestarzałe funkcje i argumenty
Włączenie trybu WP_DEBUG spowoduje również wyświetlenie się powiadomień o używaniu przez motyw lub wtyczkę przestarzałych funkcji lub argumentów. Są to funkcje lub argumenty funkcji, które nie zostały jeszcze usunięte z podstawowego kodu, ale mają zostać usunięte w najbliższej przyszłości. Powiadomienia o wycofanych funkcjach i argumentach często informują jaka jest nowa wersja funkcji lub jak uzyskać ten sam efekt przy pomocy innych funkcji.
Logi WP_DEBUG_LOG
WP_DEBUG_LOG jest uzupełnieniem WP_DEBUG, który powoduje, że wszystkie błędy są również zapisywane w pliku dziennika debug.log. Jest to przydatne, jeśli chcesz przejrzeć wszystkie powiadomienia później, chcesz ukryć błędy przed odwiedzającymi bądź chcesz wyświetlić powiadomienia wygenerowane poza ekranem (np. podczas żądań AJAX lub uruchamiając wp-cron). Wartość domyślna to false, dlatego jeżeli chcemy użyć pliku debug.log to musimy dodać do wp-config.php następującą linię:
define( 'WP_DEBUG_LOG', true );
WP_DEBUG_LOG pozwala zapisać do pliku debug.log ostrzeżenia z natywnej w PHP funkcji error_log() co jest przydatne w przypadku zdarzeń AJAX. Po ustawieniu wartości na true, dziennik jest zapisywany domyślnie w debug.log w katalogu wp-content (lub jego odpowiedniku). Alternatywnie, możemy ustawić własną ścieżkę pliku, aby plik został zapisany w innym miejscu.
define( 'WP_DEBUG_LOG', '/tmp/wp-errors.log' );
Aby funkcja WP_DEBUG_LOG mogła cokolwiek wygenerować w dzienniku debug.log tryb WP_DEBUG musi być włączony.
WP_DEBUG_DISPLAY
Stała WP_DEBUG_DISPLAY to kolejne uzupełnienie WP_DEBUG. Za pomocą WP_DEBUG kontrolujemy, czy błędy, ostrzeżenia i inne komunikaty debugowania mają być umieszczane w generowanym przez szablony kodzie HTML czy nie. Wartość domyślna to true, co pokazuje błędy i ostrzeżenia w miarę ich generowania. Miejsce wygenerowania się błędu lub miejsce „ucinania się” poprawnego kodu HTML strony może być wskazówką co jest nie tak z daną wtyczką bądź szablonem. Ustawienie zmiennej WP_DEBUG_DISPLAY na false spowoduje ukrycie wszystkich błędów z front-endu.
define( 'WP_DEBUG_DISPLAY', false );
Oczywiście, WP_DEBUG_DISPLAY ma wpływ na działanie WordPressa tylko wtedy kiedy aktywny jest tryb WP_DEBUG. WP_DEBUG_DISPLAY i WP_DEBUG_LOG można używać niezależnie od siebie.
Debugowanie zapytań SQL za pomocą SAVEQUERIES
Stała SAVEQUERIES zapisuje zapytania bazy danych w tablicy. Możemy je potem wyświetlić dla analizy tych zapytań w celu możliwych do wprowadzenia ewentualnych optymalizacji. Stała zdefiniowana jako true powoduje, że każde zapytanie jest zapisywane, tak długo jak wykonywana jest funkcja, którą wywołała dane zapytanie.
define( 'SAVEQUERIES', true );
Tablica z dodatkowymi danymi jest przechowywana w globalnych zapytaniach $wpdb -> queries.
Aktywna opcja SAVEQUERIES prawie zawsze ma negatywny wpływ na wydajność Twojej witryny, dlatego należy wyłączyć tę opcję, kiedy nie debugujemy zapytań.
SCRIPT_DEBUG
Stała SCRIPT_DEBUG to kolejna opcja, którą możemy aktywować za pomocą edycji pliku wp-config.php. Ustawienie tej opcji na true wymusi korzystanie z deweloperskich wersji kodu CSS i JS. Kod taki jest nie zminifikowany i znacznie ułatwia debugowanie front-endu.
define( 'SCRIPT_DEBUG', true );
WP_DISABLE_FATAL_ERROR_HANDLER
Zmienna WP_DISABLE_FATAL_ERROR_HANDLER służy do wyłączenia nowego sposobu obsługi błędów krytcznych wprowadzonych w WordPressie 5.2. Ustawienie tej funkcji spowoduje, że nie zostanie wyświetlona informacja o błędzie krytycznym, która znacząco utrudnia debugowanie motywu i wtyczek. Kiedy mechanizm FATAL_ERROR_HANDLER jest aktywny, jesteśmy dosłownie odcięci od jakichkolwiek informacji o błędach co jest podykotwane względami bezpieczeństwa.
define( 'WP_DISABLE_FATAL_ERROR_HANDLER ', true );
Wtyczki do debugowania WordPressa
Pewnie nikogo nie dziwi, że do debugowania, optymalizowania i udoskonalania WordPressa istnieją gotowe wtyczki. Jedną z nich jest Query Monitor, WP Debbuging, Debug Bar oraz Log Deprecated Notices.
Query Monitor
Query Monitor to panel narzędzi ułatwiających analizę i debugowanie WordPressa. Wtęczkę tę opracował John Blackbourn i umożliwia debugowanie zapytań do bazy danych, błędów PHP, podpięć i akcji, bloków edytora bloków, zakolejkowanych skryptów, arkuszy stylów, wywołań HTTP API i innych.
Zawiera kilka zaawansowanych funkcji, takich jak debugowanie wywołań AJAX, wywołania REST API i sprawdzanie uprawnień użytkownika. Obejmuje to możliwość zawężenia większości danych wyjściowych według wtyczki lub motywu, co pozwala szybko określić spowalniające funkcje we wtyczkach i motywach.

Zaletą Query Monitor jest czytelny i użyteczny interfejs. Można na przykład zagregować zapytania do bazy danych i pogrupować je według wtyczek, motywów lub funkcji, które za nie odpowiadają. Wtyczka ta dodaje element menu do paska narzędzi administratora. Dzięki temu łatwo można śledzić wydajność bieżącej strony i mieć pod ręką pełne informacje przydatne w debugowaniu.
WP Debugging
Na koniec wspomnę o wtyczce, która pozwala włączyć tryb debugowania wprost z panelu administracyjnego WordPressa. WP Debugging, której autorej autorem jest Andy Fragen posiada możliwość włączenia takich opcji debugowania jak WP_DEBUG, WP_DEBUG_DISPLAY, WP_DISABLE_FATAL_ERROR_HANDLER, SCRIPT_DEBUG, WP_DEBUG_LOG, SAVEQUERIES.

Podsumowanie
Jak widać, istnieje wiele technik wspierających prace deweloperskie poprzez ułatwienie debugowania WordPress. Korzystanie z trybu debugowania WordPress to konieczność podczas tworzenia motywów, wtyczek a także większych aktualizacji. Włączenie trybu deweloperskiego to też pierwszy krok zaradczy kiedy z naszą stroną WordPress dzieje się coś nieoczekiowanego po aktualizacji motywu czy wtyczki.
Źródła
- https://wordpress.org/support/article/debugging-in-wordpress/,
- https://www.wpoptimus.com/1832/debug-wpdb-database-queries/
Odpowiedz lub skomentuj