1. Bug
У програмістів є свій сленг. І першим словом, з яким ви познайомитеся тісно, буде баг (від англ. bug — жук). Це слово позначає помилку в програмі, через яку вона робить щось не те, падає або видає дивний результат.
Якщо програма працює дивно, але програміст запевняє, що так і було задумано, зазвичай кажуть: «Це не баг, це фіча». Інтернет повний мемів на цю тему.
Історична довідка
Легенда свідчить, що у вересні 1947 року вчені Гарварду тестували комп'ютер Mark II. Він давав збої. Перевіривши всі контакти, вони знайшли справжнього метелика, що застряг між реле. Комаху вклеїли в журнал з підписом «First actual case of bug being found» (Перший реальний випадок знайденого жука).
З того часу процес пошуку та усунення помилок називають дебаг (debug) або налагодження.

2. Debug Mode
Щоб знайти помилку, програмісти використовують Debugger (відлагоджувач). Це спеціальний інструмент всередині IntelliJ IDEA, який дозволяє поставити виконання програми на паузу і зазирнути їй «під капот».
IntelliJ IDEA може запустити вашу програму у двох режимах:
| Режим | Іконка | Гарячі клавіші | Суть |
|---|---|---|---|
| Run (Звичайний) | |
Shift+F10 (Win/Lin)Cmd+R (Mac) |
Програма просто пробігає від початку до кінця. |
| Debug (Налагодження) | |
Shift+F9 (Win/Lin)Cmd+D (Mac) |
Програма може зупинятися у вказаних місцях. |
У режимі налагодження ви можете виконувати програму порядково (рядок за рядком), спостерігаючи, як змінюються значення змінних.
3. Точки зупинки (Breakpoints)
Щоб Debugger зрозумів, де потрібно зупинитися, ви повинні поставити Break Point. Без неї програма просто пролетить до кінця, як завжди.
Давайте потренуємося на живому прикладі. Ми винесли логіку множення в окремий метод, щоб показати всю міць дебагера. Скопіюйте цей код в IDEA:
public class Main {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 5; i++) {
int result = calculateMultiply(i); // <--- Ми хочемо зупинитися тут
sum += result;
System.out.println("Step: " + i + ", Result: " + result + ", Sum: " + sum);
}
System.out.println("Final Sum: " + sum);
}
public static int calculateMultiply(int number) {
return number * 2;
}
}
Завдання. Ми хочемо подивитися, як змінюються змінні всередині циклу і зазирнути всередину нашого методу.
Дія. Клікніть мишкою у вузьку сіру смужку зліва від рядка int result = calculateMultiply(i);. З'явиться червоний кружечок.
Тепер запустіть програму через Debug (іконка жука). Програма запуститься і миттєво «замерзне» перед виконанням цього рядка.
4. Керування: F8, F7, F9
Коли програма стоїть на паузі, у вас є пульт керування у верхній частині панелі Debugger.
F8 — Крок поверх (Step Over)
Натисніть F8. Програма виконає поточний рядок (викличе метод, отримає результат) і перейде до наступного sum += result;.
Натисніть F8 ще раз. Програма додасть числа. Ви побачите, як значення змінних змінилися.
Натисніть F8 ще раз. Ви побачите вивід у консоль.
Це основний спосіб переміщення: рядок за рядком, не вдаючись у внутрішні деталі методів.
F9 — Відновити (Resume Program)
У нас цикл від 1 до 5. Натискати F8 п'ять разів, щоб пройти одне коло циклу — довго. А якщо цикл на 1000 ітерацій?
Натисніть F9. Програма «відлипне», виконає всю решту коду в поточній ітерації, піде на друге коло і... знову зупиниться на Breakpoint.
Таким чином, за допомогою F9 ви можете швидко прокручувати цикли: одне натискання — одна ітерація.
F7 — Крок всередину (Step Into)
Якщо в коді зустрінеться виклик вашого методу (в нашому випадку calculateMultiply(i)), і ви натиснете F8, Дебагер просто виконає його і піде далі. Але якщо ви хочете побачити, як працює код всередині цього методу — тисніть F7.
Спробуйте натиснути F7, коли програма зупиниться на рядку int result = calculateMultiply(i);. Дебагер перенесе вас всередину методу calculateMultiply, і ви побачите, як значення передається в параметр number.
Shift + F8 — Крок назовні (Step Out)
Що робити, якщо ви натиснули F7 випадково на рядку System.out.println(...) і потрапили в нетрі системного коду Java? Читати тисячі рядків чужого коду нудно і незрозуміло.
Тисніть Shift + F8. Програма швидко виконає все, що залишилося в поточному методі, і поверне вас назад туди, звідки ви прийшли (у ваш метод main).
5. Де дивитися значення?
Повернемося до нашого прикладу з циклом.
Спосіб 1: Inline Debugging
Подивіться прямо в редактор коду. Справа від рядків сірим кольором IDEA пише поточні значення.
Спосіб 2: Панель Variables
Внизу у вікні Debugger є вкладка Variables. Там показані всі поточні змінні.
Важливе уточнення для Java: Примітивні типи (наприклад, int) показують своє значення відразу. А от об'єкти та масиви (наприклад, String[]) зберігають всередині себе багато даних. Щоб побачити їхній вміст, потрібно клікнути на маленьку стрілочку зліва від змінної, щоб «розкрити» об'єкт.
Спосіб 3: Панель Frames
Зліва від змінних є список, який називається Frames (Стек викликів). Він показує, на якому кроці зараз знаходиться програма.
Наприклад, напис main:6, Main означає:
- Ви знаходитесь у методі main класу Main.
- Ви зупинилися на рядку номер 6.
Це ваша точна адреса в коді. Якщо ви провалитеся всередину іншого методу (натиснете F7 на calculateMultiply), у цьому списку зверху з'явиться новий запис calculateMultiply:13, Main, що вказує на те, що новий метод був викликаний з попереднього.
6. Evaluate Expression
Іноді просто дивитися на змінні замало. Ви хочете запитати: «А що буде, якщо...»
Натисніть Alt + F8 (Windows/Linux) або Option + F8 (macOS). Відкриється вікно «Evaluate». Також ви можете вводити вирази прямо в рядок під панеллю Variables.
Тут ви можете написати будь-який код, використовуючи поточні змінні. Наприклад, у нашому циклі напишіть:
sum + 100
Натисніть Enter і IDEA порахує результат, не змінюючи реальну програму. Це ваша чернетка для експериментів.
7. Conditional Breakpoints
Уявіть, що у вас цикл на 10 000 ітерацій, а помилка стається лише на 5000-му кроці. Натискати F9 п'ять тисяч разів — погана ідея.
Клікніть правою кнопкою миші по червоному кружечку Breakpoint. З'явиться спливне вікно. У полі Condition напишіть умову на Java, наприклад: i == 5. Натисніть Done.
Тепер, якщо ви запустите Debugger, програма проігнорує перші 4999 кіл і зупиниться тільки тоді, коли умова стане true. Це заощадить вам години роботи!
8. Керування всіма точками зупинки
Іноді новачки ставлять так багато Breakpoints у різних файлах проєкту, що програма потім постійно зупиняється в несподіваних місцях. Шукати червоні кружечки по всіх файлах вручну — довго.
Натисніть Ctrl + Shift + F8 (Windows/Linux) або Cmd + Shift + F8 (macOS). Відкриється вікно Breakpoints.
Тут ви бачите список усіх точок зупинки у вашому проєкті. Ви можете зняти з них галочки (тимчасово вимкнути) або видалити клавішею Delete.
9. Підсумки
Ми розглянули основний арсенал Java-розробника для пошуку помилок. Відлагоджувач (Debugger) — це те, що перетворює написання коду з «ворожіння на кавовій гущі» в точну інженерну роботу.
Вміння швидко знаходити причину помилки — це навичка, яка цінується в комерційній розробці навіть вище, ніж уміння швидко писати код. Практикуйтеся з умовними брейкпоінтами та Evaluation, і жоден баг від вас не сховається.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ