Witam wszystkich, społeczność JavaRush. Dzisiaj porozmawiamy o debugowaniu: co to jest i jak debugować w Intellij IDEA. Artykuł przeznaczony jest dla osób, które posiadają już minimalną wiedzę na temat Java Core. Nie będzie żadnych ram ani skomplikowanych procesów publikowania bibliotek. Łatwy spacer. Zatem usiądź wygodnie i zaczynajmy!
dokumentacji pliku README znajdującego się w root projektu czytamy: oczekiwane zachowanie - ze wszystkich kwiatów, z których zostanie zebrany nektar (jako wartość podwójna ), zostanie zebrana ilość miodu równa połowie zebrany nektar. Projekt posiada następujące klasy:
dokumentacji pliku README jest napisane, że nektar zamienia się w miód w stosunku 2 do 1:
dokumentacji zawiera błąd i będzie wymagał aktualizacji. Zaktualizujmy plik README:
hubie JavaRush ze sprytnym spojrzeniem :)
Dlaczego potrzebujesz debugowania?
Wyjaśnijmy od razu: nie ma kodu bez błędów... Tak działa życie. Dlatego nie powinniśmy od razu popadać w bezwładność i rezygnować ze wszystkiego, jeśli kod nie działa tak, jak tego oczekiwaliśmy. Ale co robić? Oczywiście możesz instruować,System.out.println
gdzie tylko jest to możliwe, a następnie przeglądać dane wyjściowe w terminalu w nadziei, że uda ci się znaleźć błąd. A jednak jest to możliwe… i oni to robią, i robią to ostrożnie, stosując logowanie (przeczytasz o tym tutaj ). Jeśli jednak możliwe jest uruchomienie kodu na komputerze lokalnym, lepiej użyć Debug . Od razu zaznaczam, że w tym artykule rozważymy debugowanie projektu wewnątrz Intellij IDEA. Jeśli jesteś zainteresowany przeczytaniem o zdalnym debugowaniu, oto artykuł z naszego zasobu .
Co to jest debugowanie
Debugowanie to proces debugowania (sprawdzania) kodu, podczas którego w trakcie jego wykonywania można zatrzymać się w wyznaczonym miejscu i obserwować postęp wykonania. Zrozum stan programu w określonym miejscu. To dokładnie tak samo, jakbyś mógł zatrzymać życie i spojrzeć na wszystko z zewnątrz. Fajnie, prawda? Naszym celem jest szybkie i łatwe nauczenie się debugowania aplikacji przy użyciu naszego ulubionego środowiska programistycznego Intellij IDEA.Czego potrzebujesz, aby rozpocząć debugowanie
Udzielam darmowej porady: podczas czytania artykułu zrób wszystko, co zostanie tutaj opisane, na szczęście jest na to wszystko. Czego potrzebujesz:- Środowisko programistyczne Intellij IDEA w wersji 2019.3.1 i wyższej. Gdyby ktoś nie posiadał, tutaj znajduje się link , z którego można go pobrać. Pobierz wersję Community, ponieważ właśnie z niej będę korzystać.
- Sklonuj projekt z GitHub i zaimportuj go przez IDEA.
Trochę teorii... obiecuję :D
Aby trochę rozpocząć debugowanie, musisz zrozumieć, czym jest punkt przerwania i poznać kilka skrótów klawiszowych potrzebnych na początek. BreakPoint to specjalny znacznik wyświetlający lokalizację lub stan, w którym aplikacja powinna zostać zatrzymana. Możesz ustawić punkt przerwania, klikając lewym przyciskiem myszy lewy pasek boczny lub klikając lokalizację kodu i naciskając Ctrl + F8 . Punkty przerwania występują w trzech typach: znak linii, znak zmiennej i znak metody. To wygląda tak:-
Za linię:
jeśli w wyrażeniu znajduje się lambda, IDEA oferuje wybór - umieścić wyrażenie w całej linii lub konkretnie w lambdzie:
-
Według metody:
-
Na zajęcia
- Bee.java:24 - w klasie Bee w linii 24
- Main.java:14 - w klasie Main w linii 14
Chodźmy, włammy się do dziczy debugowania
Ponieważ jestem pszczelarzem dziedzicznym, na potrzeby prezentacji debugowania stworzyłem projekt opisujący proces zbierania nektaru przez pszczoły, przetwarzania nektaru na miód i pozyskiwania miodu z ula. Na podstawie- Pszczoła - zwykła pszczoła robotnica;
- BeeQueen – królowa pszczół;
- BeeHive - ul;
- HoneyPlant – roślina miododajna, z której zbiera się miód;
- Main - gdzie
public static void main()
znajduje się metoda, w której rozpoczyna się projekt.
main()
, okaże się, że nie dość, że nie jest liczona ilość miodu, to jeszcze pojawia się błąd... Trzeba się przyjrzeć, co tam jest nie tak. Ze śladu stosu w prawym dolnym rogu widzimy, że w programie HoneyPlant.java:20
zostaje zgłoszony wyjątek RuntimeException: Dokładnie tak jest w naszym przypadku: istnieje wyjątek RuntimeException, dodajmy wyszukiwanie takiego wyjątku, jak opisano powyżej, i uruchom main()
metodę w Tryb debugowania. W tym celu należy kliknąć w zieloną strzałkę trójkąta w Intellij IDEA przed metodą main()
: i otrzymamy zatrzymany program w chwili przed wyzwoleniem wyjątku z tą ikoną.Aby uzyskać pełne informacje należy zajrzeć do sekcji Debugowanie. Zawiera Zmienne , które pokazują wszystkie zmienne dostępne w tej części aplikacji:
- nektar = 1,0;
- pojemność nektaru = -1,0.
if ( nectar == 0 ) {
return 0;
}
Problem polega jednak na tym, że sprawdza niewłaściwą zmienną... i jest to błąd w kodzie. Zamiast sprawdzać wartość nektaru w kwiatku, która znajduje się w zmiennej nectarCapacity , program sprawdza wartość nektaru , która wchodzi do metody i jest to ilość, jaką chcą pobrać z nektaru. Oto pierwszy błąd! Dlatego umieściliśmy to poprawnie i otrzymaliśmy wyrażenie:
if ( nectarCapacity == 0) {
return 0;
}
Następnie uruchamiamy main()
metodę w trybie normalnym (Run `Main.main()`)
i już nie ma błędu, program zadziałał: Aplikacja zadziałała i dała odpowiedź: „33,0 miodu wyprodukowało 7 pszczół z 2 miododajnych roślin” Wszystko byłoby w porządku, ale odpowiedź brzmi źle... Wszystko dlatego, że w ## Documentation
Presentation based on honey getting process.
**Note**: 1 honey point = 2 nectar points
Z metody głównej widać, że są dwie rośliny miodu, odpowiednio 30 i 40 jednostek nektaru, więc ostatecznie powinieneś otrzymać 35 jednostek miodu. I pisze, że 33. Gdzie poszły pozostałe dwie jednostki?... Teraz się dowiemy! Aby to zrobić, musimy umieścić punkt przerwania w metodzie Main.main()
w linii nr 28, gdzie zostanie ona wykonana beeHive.populateHoney()
i uruchomić main
metodę w trybie debugowania: Przyjrzyjmy się temu punktowi bliżej. Program zatrzymał się przed wykonaniem 28. linii. Na dole widzimy sekcję Debugowanie, która opisuje wszystkie informacje na temat uruchomionej aplikacji. Część Zmienne, jak już wspomniano, zawiera wszystkie zmienne i obiekty dostępne z tej części aplikacji. Część Ramki pokazuje kroki, przez które przechodzi aplikacja, możesz spojrzeć na poprzedni krok i uzyskać wszystkie dane lokalne. Aby program nadal działał, 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ę: Następnie, aby przejść krok po kroku przez aplikację, możesz skorzystać z dwóch klawiszy:
- F8 – przejdź przez sekcję kodu i nie wchodź w metody wewnętrzne;
- F7 – przejdź przez sekcję kodu i wprowadź metody wewnętrzne.
beeHive.populateHoney()
należy wcisnąć F7 i ruszamy dalej: Następnie przechodzimy przez tryb debugowania za pomocą F8 stosując tę metodę do końca i opisujemy co się dzieje w tej metodzie:
- Linia 25 – Stream API służy do zbierania miodu od wszystkich pszczół;
- 26. linia - do istniejącej dodaje się miód;
- 27. linia - dla królowej przydzielono 2 jednostki miodu;
- 28. linia - te dwie jednostki są usuwane z całkowitej ilości miodu;
- Linia 29 - macica zjada ten miód.
## Documentation
Presentation based on honey getting process.
**Note**:
* 1 honey point = 2 nectar points
* 2 honey point queen bee eats every time when beehive populates the honey.
I tyle: wszystkie znalezione błędy zostały naprawione, możemy spokojnie dalej pić kawę i czytać artykuły na Podsumować
W tym artykule dowiedzieliśmy się, że:- nie ma pracy bez błędów, a debugowanie to świetny sposób na ich rozwiązanie;
- co to jest punkt przerwania i jakie typy on istnieje;
- jak skonfigurować punkt przerwania wyjątku;
- Jak poruszać się w trybie debugowania.
Artykuł do przeczytania
- Projekt wykorzystany w artykule
- IntelliJ IDEA i debugowanie: nie nurkowanie, ale snorkeling
- Gorzka prawda o programowaniu...
- Oficjalna dokumentacja
- Rodzaje punktów przerwania. Oficjalna dokumentacja
- Jak test rozmowy kwalifikacyjnej zamienił się w bibliotekę open source
- Tworzenie systemu monitorowania cen biletów lotniczych: przewodnik krok po kroku [Część 1]
- Przewodnik po tworzeniu klienta dla API Skyscanner i publikowaniu go w jCenter i Maven Central [Część 1]
- Rejestrowanie: co, jak, gdzie i czym?
GO TO FULL VERSION