Здравейте всички в общността на CodeGym! Днес нека поговорим за отстраняването на грешки — Howво е това и How да отстранявате грешки в IntelliJ IDEA. Тази статия е предназначена за хора, които вече имат минимални познания за Java Core. Няма да има рамки or сложни proceduresи за публикуване на библиотеки. Спокойна разходка. Така че настанете се удобно и да започваме!
на documentацията , който може да бъде намерен в основната директория на проекта, очакваното поведение на всички цветя, от които се събира нектар, е количеството събран мед (което е под формата на двойно ) да бъде равно на половината от събрания нектар. Проектът има следните класове:
на documentацията , нектарът се превръща в мед в съотношение 2 към 1:
на documentацията съдържа грешка и трябва да бъде актуализиран. Нека актуализираме file README:
Stack Overflow CodeGym :)
Защо имате нужда от режим за отстраняване на грешки
Нека веднага да изясним нещо за себе си: няма code без грешки... Просто така работи животът. Така че не трябва да се разпадаме на парчета и да се отказваме, ако нашият code не работи Howто очакваме. Но Howво да правим? Е, можем да поставимSystem.out.println
изрази навсякъде и след това да претърсим изхода на конзолата с надеждата да открием грешка. Въпреки това можете (и хората го правят) да отстранявате грешки, като използвате внимателно регистриране. Но ако можете да стартирате codeа си на локална машина, по-добре е да използвате режима за отстраняване на грешки . Искам веднага да отбележа, че в тази статия ще разгледаме отстраняването на грешки в проект с помощта на IntelliJ IDEA.
Какво представлява режимът за отстраняване на грешки?
Режимът за отстраняване на грешки е за отстраняване на грешки (проверка) на работещ code. Позволява ви да спрете изпълнението на определени места и да видите How се развиват нещата. Позволява ви да разберете състоянието на програмата на определено място в codeа. Това е като да можеш да спреш часовника и да погледнеш всичко отстрани. Готино, нали? Нашата цел е бързо и лесно да се научим How да отстраняваме грешки в applications с помощта на нашата любима среда за разработка IntelliJ IDEA.Какво ви трябва, за да започнете отстраняване на грешки
Ето няколко безплатни съвета: докато четете тази статия, направете всичко, което ще бъде описано тук - имате всичко, което трябва да направите, за да следвате. От Howво имаш нужда:- IntelliJ IDEA version 2019.3.1 or по-нова. В случай, че някой няма това, ето връзка, от която можете да го изтеглите . Изтеглете Community Edition — това е versionта, която ще използвам.
- Клонирайте този GitHub проект и го импортирайте чрез IDEA.
Само малко теория... обещавам :D
За да започнете дори малко да отстранявате грешки, трябва да разберете Howво е точка на прекъсване и да сте запознати с няколко горещи клавиша. Точката на прекъсване е специален маркер, който показва къде искате да спре изпълнението на приложението, вероятно въз основа на състоянието на приложението. Можете да зададете точка на прекъсване or като щракнете с левия бутон върху левия страничен панел, or като щракнете върху местоположението на codeа и натиснете Ctrl+F8 . Нека разгледаме три типа точки на прекъсване: точки на прекъсване на линия, точки на наблюдение на поле и точки на прекъсване на метод. Ето How изглежда:-
На линия:
Ако дадено изявление има ламбда израз, тогава IDEA ви подканва да изберете дали да поставите точката на прекъсване върху целия израз or конкретно върху ламбда израза:
-
По метод:
-
В клас:
- Bee.java:24 — в класа Bee на ред 24
- Main.java:14 — в главния клас на ред 14
Хайде да направим това нещо, наречено отстраняване на грешки!
Произхождам от дълга линия семейни пчелари, така че проектът, който създадох, за да илюстрирам отстраняването на грешки, описва модели на процеса на събиране на нектар от пчелите, преработване на нектар в мед и след това получаване на мед от пчелния кошер. Според file README- Пчела — обикновена пчела работничка
- BeeQueen — пчелната майка
- BeeHive — кошерът
- HoneyPlant — медоносно растение (източник на нектар), от което се събира нектар
- Основен — това е мястото, където намираме
public static void main()
, методът, от който започва изпълнението.
main()
метода, тогава откриваме, че нашата програма не само не изчислява количеството мед, но също така хвърля изключение... Трябва да проучим и да определим Howъв е проблемът. От стека за проследяване в долния десен ъгъл можем да видим, че в RuntimeException е хвърлено при HoneyPlant.java:20
: Точно за това говорихме по-горе. Нека наблюдаваме това RuntimeException, като стартираме main()
метода в режим на отстраняване на грешки. За да направите това, щракнете върху зелената триъгълна стрелка в IntelliJ IDEA до метода main()
. В резултат на това програмата ще бъде спряна в момента точно преди изключението да бъде хвърлено и ще видим тази икона: За да получим цялата налична информация, трябва да погледнем в раздела за отстраняване на грешки. Има променливипанел, който показва всички променливи, налични в тази част на приложението:
- нектар = 1,0;
- нектарен капацитет = -1.0.
if (nectar == 0) {
return 0;
}
Но проблемът е, че проверяваме грешната променлива. Това е грешка в codeа. Вместо да проверява наличното количество нектар в цветето (което се съхранява в променливата nectarCapacity ), програмата проверява стойността на параметъра за нектар на метода , което е количеството нектар, което искаме да вземем от цветето. Ето го! Първият ни бъг! След като поправим това, получаваме следния code:
if (nectarCapacity == 0) {
return 0;
}
Сега стартирайте main()
метода по нормалния начин (Run 'Main.main()')
. Няма изключение и програмата работи: Приложението се изпълнява до завършване и дава следния отговор:
"33.0 honey was produced by 7 bees from 2 honey plants"
Сега всичко би било наред, но този отговор е неправилен... Според file README
## Documentation
Presentation based on honey production.
**Note**: 2 units of nectar = 1 unit of honey
Основният метод явно има две медоносни растения съответно с 30 и 40 единици нектар. Така че в крайна сметка трябва да имаме 35 единици мед. Но програмата ни казва, че получаваме 33. Къде отидоха другите две единици? Нека разберем! За да направите това, задайте точка на прекъсване в Main.main()
метода на ред 28, където beeHive.populateHoney()
се извиква и стартирайте main()
метода в режим на отстраняване на грешки: Ще разгледаме тази точка по-подробно. Програмата спря да се изпълнява, преди да изпълни ред 28. В долната част виждаме секцията Debug, която показва цялата налична информация за работещото приложение. Както вече споменахме, прозорецът Variables съдържа всички променливи и обекти, налични от тази част на приложението. Панелът Frames показва стъпките, през които преминава приложението — можете да разгледате предишните стъпки (кадри) и да видите всички локални данни. За да продължите да изпълнявате програмата, можете да натиснете F9 or зелената икона, Howто е показано по-долу: За да спрете програмата, щракнете върху червения квадрат: За да рестартирате приложението в режим на отстраняване на грешки, щракнете върху стрелката: Освен това можете да продължите през приложение стъпка по стъпка с помощта на два ключа:
- F8 — Преминава през codeа, без да навлиза в методите;
- F7 — Преминаване през codeа и преминаване към методите.
beeHive.populateHoney()
метода. Влизайки в него, получаваме: Сега ще използваме F8 , за да преминем през този метод и да опишем Howво се случва в него:
- Ред 25 — Stream API се използва за събиране на нектар от всички пчели
- Ред 26 — Новосъздаденият мед се добавя към съществуващия мед;
- Ред 27 — за майката се отделят 2 единици мед
- Ред 28 — Тези две единици се премахват от общото количество мед
- Ред 29 — Кралицата яде този мед.
## 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.
Ние сме готови. Поправихме всички грешки, които открихме. Можем спокойно да продължим със самодоволна визия, да отпием малко кафе и да четем статии в Нека да обобщим
В тази статия научихме:- работата на всеки има грешки и отстраняването на грешки е чудесен начин да ги коригирате
- Howво е точка на прекъсване и Howви видове точки на прекъсване има
- How да зададете точка на прекъсване на изключение
- How да преминете през code в режим на отстраняване на грешки
GO TO FULL VERSION