Jak debugować kod skutecznie?


Cześć! 😊
Debugowanie to jedna z tych rzeczy, które każdy programista zna aż za dobrze – po prostu nie ma od niego ucieczki! Czasami kod działa świetnie, a innym razem wszystko się sypie. Wiesz, jak to jest: masz kod, który wygląda idealnie, a potem uruchamiasz go i… coś nie działa. Wtedy debugowanie staje się Twoim najlepszym przyjacielem. Dziś pokażę Ci kilka prostych trików, które pomogą Ci debugować skutecznie. Będziemy pracować w PHP, ale zasady są uniwersalne, więc jeśli zmienisz język, będziesz wiedział, jak podejść do problemu.
Zacznij od raportowania błędów i logów!
Pierwszym krokiem jest sprawdzenie, co mówi Ci system. W PHP nie musisz się martwić, że coś umknie, bo istnieje mnóstwo narzędzi, które pomogą Ci znaleźć problem.
Jeśli podejrzewasz, że coś w Twoim kodzie nie działa, najpierw sprawdź komunikaty błędów. Włącz je, jeśli jeszcze tego nie zrobiłeś. Możesz to zrobić w pliku konfiguracyjnym php.ini
:
display_errors = On
error_reporting = E_ALL
Jeśli pracujesz lokalnie, możesz po prostu włączyć wyświetlanie błędów bezpośrednio w skrypcie:
ini_set('display_errors', 1);
error_reporting(E_ALL);
Biała strona – brak komunikatu błędu
Czasami zdarza się, że zamiast komunikatu o błędzie, skrypt PHP po prostu wyświetla pustą stronę. Jest to najczęściej efekt zbyt niskiego poziomu raportowania błędów w konfiguracji serwera lub samego skryptu.
error_reporting(E_ALL);
Więcej na temat komunikatów błędów znajdziesz w osobnym wpisie pt. Jak interpretować komunikaty błędów?
Dodaj var_dump()
i print_r()
Często najlepszym przyjacielem programisty są funkcje var_dump()
i print_r()
. Choć proste, są niesamowicie skuteczne. Jak to działa? Zamiast zgadywać, co jest w zmiennej, po prostu ją „wypisz”:
$array = [1, 2, 3, 4];
var_dump($array);
Wynik:
array(4) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(4)
}
var_dump($result)
, aby zobaczyć, co dokładnie wróciło z zapytania.Przykład: Załóżmy, że masz formularz i próbujesz pobrać dane użytkownika z bazy, ale nic się nie wyświetla. Użyj tego:
$query = "SELECT * FROM users WHERE id = 1";
$result = mysqli_query($conn, $query);
var_dump($result); // Zobaczysz dokładnie, co zostało zwrócone
Sprawdzaj krok po kroku z xdebug
To już bardziej zaawansowane narzędzie, ale naprawdę warto je znać. xdebug
to rozszerzenie PHP, które pozwala na śledzenie i debugowanie kodu linijka po linijce. Dzięki temu możesz:
Przechodzić przez kod krok po kroku.
Ustawiać punkty zatrzymania (tzw. „breakpoints”).
Sprawdzać zmienne w trakcie działania skryptu.
Jeśli chcesz zacząć korzystać z xdebug
, musisz je najpierw zainstalować i skonfigurować w pliku php.ini
. Kiedy to już zrobisz, wystarczy uruchomić PHP w trybie debugowania z Twojego edytora (np. VS Code lub PhpStorm) i będziesz mógł kontrolować, co się dzieje w Twoim kodzie.
Logowanie do pliku – małe, ale skuteczne
Czasami po prostu trzeba sprawdzić, co dzieje się w różnych punktach programu. Wtedy świetnym rozwiązaniem jest logowanie do pliku. Możesz wykorzystać funkcję error_log()
w PHP:
error_log(message: 'Sprawdzam zmienną $array: ' . print_r($array, true), message_type: 3, destination: '/var/tmp/debug.log');
$array
do pliku debug.log
i będziesz wiedział, co się dzieje, nawet jeśli kod działa na serwerze i nie masz do niego bezpośredniego dostępu.Używaj bloku try-catch i obsługi błędów
Nie zapominaj o obsłudze wyjątków w PHP! To dobra praktyka, żeby myśleć o błędach już na wczesnym etapie, ponieważ pomaga to w zarządzaniu nimi. Zamiast pozwalać na przerwanie wykonywania skryptu, złap wyjątek i obsłuż go:
try {
$db = new PDO('mysql:host=localhost;dbname=test', 'root', '');
} catch (PDOException $e) {
echo 'Błąd połączenia z bazą danych: ' . $e->getMessage();
}
Pisanie testów jednostkowych
Testowanie jednostkowe to kolejna świetna metoda na wykrywanie problemów we wczesnej fazie. Testy jednostkowe pozwalają sprawdzić, czy poszczególne fragmenty kodu działają zgodnie z oczekiwaniami, zanim trafią do produkcji.
Załóżmy, że masz funkcję do dodawania dwóch liczb:
function add(int $a, int $b): int {
return $a + $b;
}
Napisz test jednostkowy, żeby upewnić się, że wszystko działa:
use PHPUnit\Framework\TestCase;
class AddTest extends TestCase {
public function testAdd() {
$this->assertEquals(5, add(2, 3));
}
}
Podsumowanie
Debugowanie to jedna z najważniejszych umiejętności w pracy programisty. Im szybciej zaczniesz korzystać z narzędzi takich jak var_dump()
, xdebug
, logowanie do plików czy testy jednostkowe, tym szybciej znajdziesz rozwiązanie problemu. I nie zapomnij o raportowanych błędach! Często właśnie te komunikaty powiedzą Ci, gdzie szukać problemu.
Więc następnym razem, kiedy Twój kod przestanie działać, nie wpadaj w panikę. Zastosuj te triki, a debugowanie stanie się prostsze i szybsze. 😎
Daj znać, jeśli masz pytania, i powodzenia w kodowaniu! ✌️
Subscribe to my newsletter
Read articles from Andrzej Kostrzewa directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
