Как и с какви средства да откриете грешки в кода на Java
При писане на код понякога не става така, както съм го издухал или не работи по принцип. Седя и се чудя: какво и къде не е наред?
След като разгледах малко кода, отивам на ресурсите на професионалисти, като Stack Overflow, и публикувам въпроса „Къде е грешката тук?“ или "Защо не работи?"
В резултат на това много често проблемът е малък: глупава печатна грешка, синтактична грешка и други подобни. Не можете да станете такъв професионалист, ако преглеждате ресурси за всяко малко нещо. И искам да бъда.
Въпрос: какви са начините за намиране на грешки в кода на Java? Какви са инструментите, методите, начините и т.н.?
Вчера всичко работеше, но днес не работи / Кодът не работи по предназначение
Какъв е процесът на отстраняване на грешки? Какво е?
Процесът на отстраняване на грешки се състои в това, че спираме изпълнението на скрипта на всяко място, разглеждаме какво има в променливите, във функциите, анализираме и отиваме на други места; Търсим онези места, където поведението се отклонява от правилното.
Ще бъде разгледан пример с Intellij IDEA, но можете да дебъгвате кода във всяка друга IDE.
Подготовка
Достатъчно е да имате налична IDE, например Intellij IDEA
Като начало, от лявата страна на панела с кода на всеки ред, можете да щракнете върху LMB, като по този начин зададете точка на прекъсване (точка на прекъсване - точка на прекъсване). Това е мястото, където дебъгерът автоматично ще спре изпълнението на Java веднага щом го достигне. Броят на точките на прекъсване не е ограничен. Можете да поставите навсякъде и по много.
Отстраняването на грешки се стартира чрез натискане на Shift+F9 или чрез избиране на Run → Debug в горното меню или чрез натискане на зеления "бъг":
В този случай, тъй като функцията се извиква незабавно на същата страница, след което, когато щракнете върху бутона Debug, дебъгерът незабавно ще извика метода, изпълнението ще „замръзне“ на първияточка на пречупване. В противен случай, за да активирате, трябва да извършите действие, което ще изпълни желаната част от кода (щракване върху бутона в потребителския интерфейс, изпращане на POST заявка с данни и други други действия)
- Стекът на повикванията, всички вложени повиквания, довели до текущата кодова точка.
- Променливи. В момента редът под номер 24 все още не е изпълнен, така че са дефинирани само данни и numsStringArr
- Показва текущите стойности на всякакви променливи и изрази. По всяко време тук можете да кликнете върху +, да въведете името на всяка променлива и да видите нейната стойност в реално време. Например data или nums[0], или nums[i] и item.test.data.name[5].info[key[1]] и т.н. В момента редът под номер 24 все още не е изпълнен, така че сумата и изходът в раздела Watchers са маркирани в червено с надпис "не може да намери локална променлива".
За самия процес се използват контроли (вижте изображението по-горе, подчертано със зелен правоъгълник) и малко допълнителни (вижте изображението по-горе, подчертано с оранжев правоъгълник)
Показване на точката на изпълнение (Alt + F10) - прехвърля към файла и текущия ред на скрипта, който се отстранява. Например, ако има много файлове, решихме да видим какво има в другите раздели и след това забравихме къде имате отстраняване на грешки :)
Стъпка над (F8) - прави една стъпка, без да влиза във функцията. Тези. ако има някаква функция на текущия ред, а не просто променлива със стойност, тогава когато се щракне върху този бутон, дебъгерът няма да влезе в него.
Step Into (F7) - прави стъпка. Но за разлика от предишния, ако има вложено извикване (например функция), то влиза в него.
Step Out (Shift+F8) - Изпълнява команди, докато текущата функция приключи. Удобно, ако случайно сте въвели вложено повикване и трябва бързо да излезете от него беззавършване на отстраняването на грешки.
Повторно изпълнение (Ctrl+F5) - Рестартиране на отстраняването на грешки
Възобновяване на програмата (F9) - Продължава изпълнението на скрипта от текущия момент. Ако няма други точки на прекъсване, отстраняването на грешки приключва и скриптът продължава да се изпълнява. В противен случай работата се прекъсва при следващата точка на прекъсване.
Стоп (Ctrl+F2) - Край на отстраняването на грешки
Преглед на точките на прекъсване (Ctrl+Shift+F8) – Преглед на всички зададени точки на прекъсване
Заглушаване на точките на прекъсване - Деактивиране на точките на прекъсване.
И така, в текущия код можете да видите стойността на входния параметър:
- data = "23 24 11 18" - низ с данни, разделени с интервал
- numsStringArr = - масив от низове, получени от входната променлива.
Ако натиснем F8 2 пъти, ще бъдем на ред 27; в разделите Watches и Variables и в страницата със самия код ще видим, че променливата sum е инициализирана и стойността е 0, а също така nums е инициализирана и съдържа масив от цели числа.
Ако сега натиснете F8, тогава ще влезем в цикъла for и като натискаме F8 сега, докато цикълът приключи, ще бъде възможно да наблюдаваме при всяка итерация как стойността на num и sum постоянно се променя. По този начин можем да проследим стъпка по стъпка целия процес на промяна на всякакви променливи и стойности на всеки етап, който ни интересува.
По-нататъшното натискане на F8 ще премести реда на кода до редове 31, 32 и накрая 36.
Допълнително
Ако щракнете върху Преглед на точките на прекъсване в левия панел, можете не само да видите всички точки на прекъсване, но и в прозореца, който се появява, можете да настроите фино условието, при което трябва да спрете на даден знак. В метода по-горе, например, трябва да спрете само когато сумата надвишава 20.
Това е удобно, ако трябва да спрете само на определена стойност, а не винаги (особено в случай нацикли).
За повече информация относно отстраняването на грешки вижте http://learn.javajoy.net/debug-intellij-idea и официалната документация за IDE
Някои тънкости и функции на работа с Java могат да бъдат усвоени, ако напишете код в бележник и го компилирате/изпълните чрез командни редове. Несъмнено. Но вече никой не го прави. Всички използват IDE (интегрирана среда за разработка) от дълго време. Има много от тях. Една от популярните Intellij IDEA. Съветвам ви да инсталирате.
Те имат много различни възможности:
- рефакторинг
- детектор за дублиран код
- инструменти за база данни
- интеграция със системи за контрол на версиите
- подчертаване на синтаксиса
- завършване на кода
- подсказки при въвеждане на код (функции, ключови думи, променливи, които са били декларирани по-рано)
- и други
Как ще помогне?
IDE знае, че редактира кода и знае езика, на който е написан кодът. Има вграден анализатор на език за програмиране.
Дори в най-началния етап на писане на код, той може да покаже редове с банални (и не само) грешки, но които вече могат да доведат до неработещ или неправилно функциониращ код.
Веднага можете да видите:
- ниво на грешка (предупреждение, известие, грешка)
- пълен текст на грешката
- номер на ред в същия скрипт
Можете да отидете на скрипта до посочения ред и да анализирате.
Не знаете английски?
Можете да отворите всеки онлайн преводач и да копирате там текста за грешка, като замените главните букви с малки:
Грешка:(34, 9) java: не може да се намери символ символ: метод getSum() местоположение: клас test.Test
Бих искал да поправя всичкогрешки, поне нивото на сериозност „червено“. предупреждение и забележка могат да бъдат временно забравени, като например съобщение за неизползвана променлива, която определено възнамерявате да използвате по-късно. Но в крайна сметка трябва да ги поправите всички!
IDE има много повече различни и полезни функции. Ако си желаете зло, можете да продължите да пишете в тетрадка.