Debugowanie vs nauka programowania

Debugowanie i nauka

Debugowanie najczęściej kojarzy się z naprawianiem błędów (eng. bugs) w aplikacji. Nie jest to najszczęśliwsze skojarzenie choć nie da się ukryć, że trafne. Umiejętność szybkiego zlokalizowania problemów z kodem i ich usunięcie jest wysoko cenioną

Błędem jest pomijanie nauki debugowania w procesie nauki programowania. Mamy tutaj do czynienia co najmniej w dwoma aspektami:

  • wyszukiwanie i eliminowanie bug’ów (nauka radzenia sobie z błędami)
  • proces nauki poprzez analizę działającego kodu

Pierwszy z powyższych jest z wiadomych względów oczywisty. Natomiast drugi, bardzo często niewidoczny i pomijany jest wg mnie bardzo ważnym elementem wspierającym rozwój programisty.

Nauka debugowania związana jest z możliwościami jakie daje nam IDE z którym pracujemy. Podobieństwa oczywiście są, jednak znajomość skrótów, czy też funkcjonalności unikalnych dla danego środowiska programistycznego daje przewagę w szybkości pracy.

Debugowanie – przykład

Poniżej przedstawię podstawowe funkcjonalności debuggera na podstawie pracy z platformą JetBrain, IntelliJ.

Jeżeli nasz program nie działa prawidłowo. Nasze działanie zależy od tego co wyświetli nam konsola. Możliwe, że program zadziałał, jednak wynik jest niepoprawny. Musimy wtedy zlokalizować metodę, która generuje wynik i zacząć zgłębiać jej logikę. Natomiast jeżeli program “rzuci” wyjątkiem, to zazwyczaj pokazuje, która klasa i która jej linijka odpowiada za wyjątek.

Jak widać na powyrzszym przykładzie, uruchomienie programu spowodowało rzuceniem wyjątku AccountOperationException, któego propagacja nastęuje od metody w klasie Main, aż do klasy Account (każda linijka pokazuje także, dokładny numer linii kodu). Skoro znamy już miejsce wystąpienia problemu, należy sie mu przyjżeć bliżej.

W linii kodu po prawej lewej stronie klikając myszką lub używając skrótu wstawiamy tzw breakpoint’y, czyli wskzujemy gdzie podczas wykonywanie programu ma on się zatrzymać.

Używanie breakpointów w debagowaniu

W tym miejscu wypada powiedzieć, jakie opcje breakpointów daje nam InteliiJ:

  • obserwator pola (eng.: field watcher, dodawany tylko na polach) -> symbol oka
  • zatrzymaj na metodzie (wskazując linie z błędem) -> symbol rombu
  • zatrzymaj w na wyznaczonej lini -> symbol koła

Dla rozpatrywanego przykładu postawię tylko romb w linijce 34 (ponieważ błąd wskazuje na linie 42 -> throw new AccountOperationException(), która jest częścią bloku metody reduceAmount(…)).

Aby sprawdzić, co się dzieje w wybranej lokacji należy uruchomić program w trybie debuggera. Służy do tego ikona robaka lub skrót Shift+F9.

Pasek uruchamianie debuggera

Sterowanie

Następnie używając okna debuggera przemieszczamy się wraz z programem po jego zmiennych oraz wynikach działania funkcji, szukając błędu. Używamy do tego dedykowanych przycisków, lub skrótów klawiaturowych. Opanowanie elementów sterujących jest kluczowe w nauce debugowania!

Okno debuggera

Dedykowane przyciski pozwalają nam na krokową analizę działania programu.

Akcje debuggera

O tym jak rozwiązać problem przy użyciu zdefiniowanego narzędzia, oraz dlaczego nauka debugowanie jest istotna w procesie rozwoju programisty, opowiem w krótkim filmie wideo, do którego link znajdziecie poniżej.

Wideo instruktażowe

Chcesz wiedzieć więcej o strukturze projektu omawianego w filmie? Zerknij na post: „Struktura warstwowa projektu – DDD 101”

1 myśl na temat “Debugowanie vs nauka programowania

  1. Pingback: Praca programisty - plusy i minusy. - { Lekcje Kodu }

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *