Witam wszystkich w społeczności CodeGym! Dzisiaj porozmawiajmy o debugowaniu — co to jest i jak debugować w IntelliJ IDEA. Ten artykuł jest przeznaczony dla osób, które mają już minimalną wiedzę na temat Java Core. Nie będzie żadnych frameworków ani skomplikowanych procedur publikowania bibliotek. Spokojny spacer. Więc rozgość się i zaczynajmy!
dokumentacji , który znajduje się w katalogu głównym projektu, oczekiwane zachowanie wszystkich kwiatów, z których pobierany jest nektar, to ilość zebranego miodu (przyjmująca postać podwójnego ) równa połowie zebrany nektar. Projekt ma następujące klasy:
dokumentacji , nektar jest przetwarzany na miód w stosunku 2 do 1:
dokumentacji zawiera błąd i wymaga aktualizacji. Zaktualizujmy plik README:
Stack Overflow CodeGym :)
Dlaczego potrzebujesz trybu debugowania
Od razu wyjaśnijmy sobie coś: nie ma kodu bez błędów... Tak po prostu działa życie. Nie powinniśmy więc załamywać się i poddawać, jeśli nasz kod nie działa tak, jak tego oczekiwaliśmy. Ale co powinniśmy zrobić? Cóż, moglibyśmy umieszczaćSystem.out.println
instrukcje wszędzie, a następnie przeczesywać dane wyjściowe konsoli w nadziei znalezienia błędu. To powiedziawszy, możesz (i ludzie to robią) debugować, używając starannego rejestrowania. Ale jeśli możesz uruchomić swój kod na komputerze lokalnym, lepiej jest użyć trybu debugowania . Chcę od razu zauważyć, że w tym artykule rozważymy debugowanie projektu przy użyciu IntelliJ IDEA.
Co to jest tryb debugowania?
Tryb debugowania służy do debugowania (sprawdzania) działającego kodu. Umożliwia zatrzymanie egzekucji w wyznaczonych miejscach i sprawdzenie, jak postępują sprawy. Pozwala zrozumieć stan programu w określonym miejscu w kodzie. To tak, jakby móc zatrzymać zegar i spojrzeć na wszystko z boku. Fajne, prawda? Naszym celem jest szybkie i łatwe nauczenie się debugowania aplikacji przy użyciu naszego ukochanego środowiska programistycznego IntelliJ IDEA.Co jest potrzebne do rozpoczęcia debugowania
Oto kilka bezpłatnych rad: czytając ten artykuł, rób wszystko, co zostanie tutaj opisane — masz wszystko, czego potrzebujesz, aby postępować zgodnie z nim. Czego potrzebujesz:- IntelliJ IDEA w wersji 2019.3.1 lub nowszej. Jeśli ktoś nie ma tego, oto link, z którego można go pobrać . Pobierz Community Edition — to wersja, której będę używać.
- Sklonuj ten projekt GitHub i zaimportuj go przez IDEA.
Trochę teorii... obiecuję :D
Aby choć trochę rozpocząć debugowanie, musisz zrozumieć, czym jest punkt przerwania i znać kilka skrótów klawiszowych. Punkt przerwania to specjalny znacznik wskazujący miejsce zatrzymania wykonywania aplikacji, prawdopodobnie na podstawie stanu aplikacji. Możesz ustawić punkt przerwania, klikając lewym przyciskiem myszy lewy panel boczny lub klikając lokalizację kodu i naciskając Ctrl+F8 . Przyjrzyjmy się trzem typom punktów przerwania: punkty przerwania linii, punkty kontrolne pola i punkty przerwania metody. tak to wygląda:-
na linii:
Jeśli instrukcja zawiera wyrażenie lambda, IDEA prosi o wybranie, czy umieścić punkt przerwania w całej instrukcji, czy tylko w wyrażeniu lambda:
-
Na metodzie:
-
na zajęciach:
- Bee.java:24 — w klasie Bee w linii 24
- Main.java:14 — w klasie Main w linii 14
Chodźmy zrobić to, co nazywa się debugowaniem!
Pochodzę z długiej linii rodzinnych pszczelarzy, więc projekt, który stworzyłem, aby zilustrować debugowanie, opisuje modele procesu zbierania przez pszczoły nektaru, przetwarzania nektaru na miód, a następnie pozyskiwania miodu z ula. Zgodnie z plikiem README- Pszczoła — zwykła pszczoła robotnica
- BeeQueen — królowa pszczół
- BeeHive — ul
- HoneyPlant — roślina miodu (źródło nektaru), z której zbierany jest nektar
- Main — tutaj znajdujemy
public static void main()
metodę, od której rozpoczyna się wykonanie.
main()
metodę, okaże się, że nasz program nie tylko nie oblicza ilości miodu, ale także zgłasza wyjątek... Musimy zbadać i ustalić, na czym polega problem. Ze stosu śledzenia w prawym dolnym rogu możemy zobaczyć, że w RuntimeException został rzucony na HoneyPlant.java:20
: Właśnie o tym mówiliśmy powyżej. Przyjrzyjmy się temu wyjątkowi RuntimeException, uruchamiając main()
metodę w trybie debugowania. Aby to zrobić, kliknij zieloną strzałkę trójkąta w IntelliJ IDEA obok metody main()
. W rezultacie zatrzymamy program w chwili tuż przed zgłoszeniem wyjątku i zobaczymy tę ikonę: Aby uzyskać wszystkie dostępne informacje, musimy zajrzeć do sekcji Debug. Ma Zmienneokienko prezentujące wszystkie zmienne dostępne w tej części aplikacji:
- nektar = 1,0;
- pojemność nektaru = -1,0.
if (nectar == 0) {
return 0;
}
Ale problem polega na tym, że sprawdzamy niewłaściwą zmienną. To jest błąd w kodzie. Zamiast sprawdzać ilość nektaru dostępnego w kwiecie (który jest przechowywany w zmiennej nectarCapacity ), program sprawdza wartość parametru nektaru metody , czyli ilość nektaru, którą chcemy pobrać z kwiatu. Oto jest! Nasz pierwszy błąd! Po naprawieniu tego otrzymujemy następujący kod:
if (nectarCapacity == 0) {
return 0;
}
Teraz uruchom main()
metodę w normalny sposób (Run 'Main.main()')
. Nie ma żadnego wyjątku, a program działa: Aplikacja działa do końca i daje następującą odpowiedź:
"33.0 honey was produced by 7 bees from 2 honey plants"
Teraz wszystko byłoby dobrze, ale ta odpowiedź jest błędna... Zgodnie z plikiem README
## Documentation
Presentation based on honey production.
**Note**: 2 units of nectar = 1 unit of honey
Główna metoda wyraźnie obejmuje dwie rośliny miodu z odpowiednio 30 i 40 jednostkami nektaru. Tak więc docelowo powinniśmy otrzymać 35 jednostek miodu. Ale program mówi nam, że mamy 33. Gdzie podziały się pozostałe dwie jednostki? Dowiedzmy Się! Aby to zrobić, ustaw punkt przerwania w Main.main()
metodzie w linii 28, gdzie beeHive.populateHoney()
jest wywołana i uruchom main()
metodę w trybie Debug: Rozważymy ten punkt bardziej szczegółowo. Program przestał działać przed wykonaniem linii 28. W dolnej części widzimy sekcję Debug, która pokazuje wszystkie dostępne informacje o uruchomionej aplikacji. Jak już wspomniano, panel Zmienne zawiera wszystkie zmienne i obiekty dostępne z tej części aplikacji. Okienko Ramki pokazuje kroki, przez które przechodzi aplikacja — możesz przejrzeć poprzednie kroki (ramki) i zobaczyć wszystkie dane lokalne. Aby kontynuować działanie programu, możesz nacisnąć klawisz F9 lub zieloną ikonę, jak pokazano poniżej: Aby zatrzymać program, kliknij czerwony kwadrat: Aby ponownie uruchomić aplikację w trybie debugowania, kliknij strzałkę: Dalej, możesz przejść przez aplikacja krok po kroku za pomocą dwóch klawiszy:
- F8 — Przejdź przez kod bez wchodzenia w metody;
- F7 — Przejdź przez kod i przejdź do metod.
beeHive.populateHoney()
metody. Wchodząc w to, otrzymujemy: Teraz użyjemy F8 , aby przejść przez tę metodę i opisać, co się w niej dzieje:
- Linia 25 — Stream API służy do zbierania nektaru od wszystkich pszczół
- Linia 26 — Nowo utworzony miód jest dodawany do istniejącego miodu;
- Linia 27 — 2 jednostki miodu przeznaczone są dla królowej
- Wiersz 28 — Te dwie jednostki są usuwane z całkowitej ilości miodu
- Linia 29 — Królowa zjada ten miód.
## Documentation
Presentation based on honey production.
**Note**:
* 2 units of nectar = 1 unit of honey
* The queen bee eats 2 units of honey every time when beehive is replenished with honey.
Skończyliśmy. Naprawiliśmy wszystkie znalezione błędy. Możemy spokojnie kontynuować z zadowolonym spojrzeniem, popijać kawę i czytać artykuły na Podsumujmy
W tym artykule dowiedzieliśmy się:- praca każdego ma błędy, a debugowanie to świetny sposób na ich naprawienie
- co to jest punkt przerwania i jakie są rodzaje punktów przerwania
- jak ustawić punkt przerwania wyjątku
- jak przejść przez kod w trybie debugowania
GO TO FULL VERSION