Debugowanie to proces wyszukiwania, zrozumienia i usuwania błędów w kodzie, czyli sytuacji, w których program działa inaczej, niż zakładał programista. Obejmuje odtworzenie problemu, ustalenie jego przyczyny, poprawkę i sprawdzenie, czy błąd nie wraca. Jest stałą częścią pracy programisty, a nie wyjątkową sytuacją.
Skąd wzięło się słowo debugowanie?
Słowo bug, czyli robak, określało usterki techniczne już w XIX wieku, m.in. w notatkach Thomasa Edisona. Najsłynniejsza anegdota pochodzi z 1947 roku: zespół pracujący przy komputerze Mark II na Uniwersytecie Harvarda, do którego należała Grace Hopper, znalazł w przekaźniku ćmę, która powodowała awarię. Owad został wklejony do dziennika z dopiskiem o pierwszym prawdziwym przypadku znalezienia robaka. Od tego czasu usuwanie błędów nazywa się debugowaniem.
Rodzaje błędów w kodzie
| Rodzaj | Na czym polega | Przykład |
|---|---|---|
| Składniowy | kod jest niepoprawny dla języka i nie da się go uruchomić | brak nawiasu lub średnika |
| Wykonania | kod się uruchamia, ale przerywa działanie w trakcie | odwołanie do nieistniejącej zmiennej, dzielenie przez zero |
| Logiczny | kod działa bez komunikatów, ale daje zły wynik | zła kolejność warunków, pomylony operator |
| Środowiskowy | błąd występuje tylko na jednym serwerze lub w jednej przeglądarce | inna wersja PHP, brak rozszerzenia |
Najtrudniejsze są błędy logiczne i środowiskowe, bo program nie zgłasza żadnego komunikatu. Szczególną grupą są błędy, które znikają, gdy próbuje się je obserwować, np. po dodaniu logowania zmienia się kolejność operacji. Programiści nazywają je żartobliwie heisenbugami.
Metody debugowania
- Logowanie, czyli wypisywanie wartości zmiennych w kluczowych miejscach programu,
- punkty przerwania (breakpoints), które zatrzymują program w wybranej linii i pozwalają obejrzeć jego stan,
- wykonywanie krok po kroku, linia po linii, z podglądem zmiennych,
-
wyszukiwanie binarne, czyli zawężanie miejsca błędu przez wyłączanie połowy kodu lub porównywanie wersji, np. poleceniem
git bisect, - metoda gumowej kaczki, czyli tłumaczenie kodu linijka po linijce, choćby przedmiotowi na biurku, co często samo ujawnia błąd w rozumowaniu.
Debugowanie a testowanie
Testowanie sprawdza, czy program działa poprawnie, i wykrywa, że coś jest nie tak. Debugowanie zaczyna się, gdy wiadomo już, że błąd istnieje, i polega na znalezieniu jego przyczyny. Testy automatyczne skracają debugowanie, bo wskazują, która funkcja przestała działać i od której zmiany.
Narzędzia i konkretny proces dla kodu po stronie przeglądarki i serwera opisuje poradnik jak debugować kod JavaScript i PHP.
Zobacz w praktyce
Jak debugować kod JavaScript i PHP krok po kroku
Błędy JavaScript - jak ich skutecznie unikać?
Błąd 500 (Internal Server Error) - co oznacza i jak go naprawić? Powiązane pojęcia
Wszystkie hasła z kategorii Programowanie i wzorce projektowe