java_debug_1

Debugowanie w IntelliJ #1

W pierwszej części krótkiego cyklu o debugowaniu w IDE IntelliJ Community przyjrzymy się zupełnym podstawom.

Czym jest debugowanie?

Zacznijmy od tego, czym jest debugowanie. Przede wszystkim jest to proces, podczas którego szukamy błędów w kodzie i je naprawiamy. Oczywiście nie jest to tak, że manager rzuca hasłem “a teraz debugujemy” i każdy szuka błędów w ciemno.

O wiele bardziej przypomina to “zabawę” w detektywa – zawsze znamy kontekst danego błędu. To znaczy wiemy, co tester (albo użytkownik) zrobił, jakie były dane wejściowe, jak miał być efekt, a co stało się faktycznie.

I teraz wkraczamy my, programiści. Przy odrobinie szczęścia znamy od strony kodu obszar programu, w którym zdarzył się błąd. Dostajemy więc zgłoszenie: nie można utworzyć nowej rezerwacji, dla osoby o nazwisku Paul Schäfer, przy kliknięciu “Utwórz” nic się nie dzieje, okno dodawania nie zamyka się, brak komunikatu o błędzie czy sukcesie.

Z odrobiną doświadczenia programistycznego możemy już na starcie powiedzieć, że błąd najprawdopodobniej powoduję literka ä w nazwisku. Podstawowym pytaniem jest więc “na którym etapie” – przy przenoszeniu danych z UI do części serwerowej, przy procesowaniu danych po stronie serwera czy może jeszcze głębiej, problem jest przy przesyłaniu danych do bazy.. albo i w samej bazie. Drugim problemem jest brak komunikatu dla użytkownika – znaczy to, że ktoś, gdzieś “zjada” cały wyjątek, albo zapomniał po jego zalogowaniu dodać też odpowiedni komunikat.

To jest już bardzo piękna sytuacja, bo wiemy gdzie szukać. Często jest tak, że nie mamy pojęcia gdzie zacząć i wówczas pozostaje prześledzenie całej ścieżki wykonywania programu od momentu, kiedy użytkownik kliknie “Utwórz rezerwację”.

Techniczna strona debugowania

Używając tylko logowania i wypisywania na konsolę różnych informacji nie jest zbyt efektywnym sposobem na powtórzenie błędu. O wiele lepszym rozwiązaniem jest oferowany przez każde IDE tryb debug. Jest to specjalny tryb, w którym możemy zatrzymać wykonywanie programu w dowolnym miejscu, podejrzeć jakie wartości mają wszelkiego rodzaju zmienne, jaki jest stan obiektów. Możemy również “podróżować” po stosie wywołań.

W IntelliJ tryb ten uruchamia się:

  • klikając na ikonie zielonego robaczka, na górze po prawej stronie
  • używając skrótu klawiszowego Shift+F9
  • wybierając pozycję ‘Debug’ z menu ‘Run’
Widok IntelliJ

Samo uruchomienie programu w trybie debug jeszcze nic nam nie da. Potrzebujemy także sposobu, by zatrzymać się w interesującym nas miejscu. Sposób ów nosi miano breakpointów.

Breakpoint

Breakpoint jest to znak “STOP” dla naszego programu uruchomionego w trybie debug. Ustawia się ów sygnał na poziomie linii kodu, klasy, zmiennej, bądź metody. Podstawowym typem jest ten pierwszy, czyli na poziomie linii kodu.

By utworzyć breakpoint musimy kliknąć lewym przyciskiem myszy na prawo od numeru linii w edytorze kodu w IntelliJ. Ma on postać czerwonej kropki.

Teraz, gdy odpalimy program w trybie debug to wykonanie zatrzyma się w linii 19, a u dołu IDE pojaw się zakładka służąca do debugowania.

Tutaj widzimy, kolejno od lewej:

  • zestaw guzików do ponownego odpalania programu, kontynuowania obecnego przebiegu (oznaczona, zielona strzałka), zatrzymania programu oraz kontroli breakpointów: pierwszy z nich (podwójne, czerwone koła) otwiera okno to konkretnych ustawień każdego breakpointa (o tym w następnych odcinkach), a ten s przekreślonym kołem deaktywuje wszystkie breakpointy.
  • Kolejnym elementem jest dropdown dzięki, któremu możemy wybrać wątek w którym chcemy ‘pogrzebać’, obecnie jest to główny wątek javy – main. Poniżej mamy stos wywołań dla danego wątku.
  • Po prawej stronie i główną część zakładki zajmuje lista zmiennych i obiektów. Tu możemy przyjrzeć się ich konkretnym wartościom w chwili zatrzymania programu.

I tak mamy tam ‘this‘, czyli aktualny obiekt wraz ze wszystkimi polami. Mamy age i name, o wartościach, odpowiednio, 34 i “Paul Schafer”. Widzimy przy tych dwóch zmiennych żółte koło z literką P – znaczy to, że dane te to parametry funkcji. Finalnie mamy newOne, czyli obiekt Gościa, który został utworzony linie wyżej. Możemy podejrzeć jego pola.

W celu wyjścia z ‘zatrzymania’ programu i kontynuowania wykonania należy kliknąć zieloną strzałkę, albo użyć skrótu F9.

To na tyle w tej części, zapraszam do kolejnych 🙂

By być na bieżąco i mieć realny wpływ na tematykę tworzonych przeze mnie artykułów zapraszam do dołączenia do mojego newslettera.

Jedna myśl w temacie “Debugowanie w IntelliJ #1”

Dodaj komentarz

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