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

2. Debug Mode
Щоб знайти помилку, програмісти використовують Debugger. Це спеціальний інструмент усередині IntelliJ IDEA, який дає змогу поставити виконання програми на паузу й зазирнути їй «під капот».
IntelliJ IDEA може запускати вашу програму у двох режимах:
| Режим | Іконка | Гарячі клавіші | Суть |
|---|---|---|---|
| Run (звичайний) | |
Shift+F10 (Win/Lin)Ctrl+R (Mac) |
Програма просто виконується від початку до кінця. |
| Debug (налагодження) | |
Shift+F9 (Win/Lin)Ctrl+D (Mac) |
Програма може зупинятися у вказаних місцях. |
У режимі налагодження ви можете виконувати програму покроково (рядок за рядком), спостерігаючи, як змінюються значення змінних.
3. Точки зупинки
Щоб Debugger зрозумів, де потрібно зупинитися, ви маєте поставити breakpoint. Без нього програма, як і завжди, просто пролетить до кінця.
Потренуймося на реальному прикладі. Скопіюйте цей код в IDEA:
fun main() {
var sum = 0
for (i in 1..5) {
val result = i * 2 // <--- Тут хочемо зупинитися
sum += result
println("Крок: $i, Результат: $result, Сума: $sum")
}
println("Підсумкова сума: $sum")
}
Завдання: ми хочемо подивитися, як змінюється змінна sum усередині циклу.
Дія: клацніть мишкою у вузьку сіру смужку ліворуч від рядка val result = i * 2. Зʼявиться червоне кружечко.
Тепер запустіть програму через 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)
Припустімо, ми трохи ускладнили наш код і винесли логіку множення в окрему функцію:
fun main() {
var sum = 0
for (i in 1..5) {
val result = calculateMultiply(i) // <--- Тут хочемо зупинитися
sum += result
println("Крок: $i, Результат: $result, Сума: $sum")
}
println("Підсумкова сума: $sum")
}
fun calculateMultiply(number: Int): Int {
return number * 2
}
Якщо на рядку з викликом val result = calculateMultiply(i) ви натиснете F8, Debugger просто виконає його повністю, миттєво запише відповідь у result і піде далі. Але якщо ви хочете побачити, як працює код усередині цієї функції, тисніть F7.
Debugger перенесе вас усередину calculateMultiply, і ви побачите, як значення змінної i передається в параметр number. Це незамінно, коли ви шукаєте помилку всередині складної функції.
Shift + F8 — Крок назовні (Step Out)
Що робити, якщо ви випадково натиснули F7 на рядку println(...) і потрапили в хащі системного коду Kotlin або вихідних кодів Java? Читати тисячі рядків чужого коду нудно й незрозуміло.
Тисніть Shift + F8. Програма швидко виконає все, що залишилося в поточній системній функції, і поверне вас назад туди, звідки ви прийшли (у вашу функцію main).
5. Де дивитися значення?
Повернімося до нашого прикладу з циклом.
Спосіб 1: Inline Debugging
Погляньте прямо в редактор коду: праворуч від рядків сірим кольором IDEA показує поточні значення.
Спосіб 2: Панель Variables
Унизу у вікні Debugger є вкладка Variables. Там показано всі змінні. Ви можете розкривати списки й обʼєкти, вивчаючи їхній вміст.
Спосіб 3: Панель Frames
Ліворуч від змінних є список, який називається Frames. Він показує, на якому кроці зараз перебуває програма.
Наприклад, напис main:4 (або main:4, MainKt) означає:
- Ви перебуваєте у функції main.
- Ви зупинилися на рядку 4.
Це ваша точна адреса в коді. Якщо ви провалитеся всередину іншої функції (натиснете F7), у цьому списку зверху зʼявиться новий запис.
6. Суперсила: Evaluate Expression (Alt+F8)
Іноді просто дивитися на змінні замало. Хочеться запитати: «А що буде, якщо…»
Поставте програму на паузу. Натисніть Alt + F8 (Windows/Linux) або Option + F8 (macOS). Відкриється вікно «Evaluate». Також ви можете вводити вирази прямо в рядок під панеллю Variables.
Тут ви можете написати будь-який код, використовуючи поточні змінні. Наприклад, у нашому циклі введіть:
sum + 100
IDEA обчислить результат, не змінюючи реальну програму. Це ваша чернетка для експериментів.
7. Conditional Breakpoints
Уявіть, що у вас цикл на 10 000 ітерацій, а помилка трапляється лише на 5000-му кроці. Натискати F9 пʼять тисяч разів — погана ідея.
Клацніть правою кнопкою миші по червоному кружечку breakpoint. Зʼявиться спливне вікно. У полі Condition задайте умову на Kotlin, наприклад: i == 4. Натисніть Done.
Тепер, якщо ви запустите Debugger, програма проігнорує перші 4999 кіл і зупиниться лише тоді, коли умова стане true. Це заощадить вам години роботи!
8. Керування всіма точками зупинки
Іноді новачки ставлять так багато breakpoint у різних файлах проєкту, що програма потім постійно зупиняється в неочікуваних місцях. Шукати червоні кружечки по всіх файлах вручну — довго.
Натисніть Ctrl + Shift + F8 (Windows/Linux) або Cmd + Shift + F8 (macOS). Відкриється вікно Breakpoints.
Тут ви бачите список усіх точок зупинки у вашому проєкті. Ви можете зняти з них прапорці (тимчасово вимкнути) або видалити клавішею Delete.
9. Підсумки
Ми розглянули основний арсенал розробника для пошуку помилок. Відлагоджувач (Debugger) — це інструмент, який перетворює написання коду з «ворожіння на кавовій гущі» на точну інженерну роботу.
Уміння швидко знаходити причину помилки — навичка, яку в розробці цінують навіть вище, ніж уміння швидко писати код. Практикуйтеся — і жоден баг від вас не сховається.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ