JavaRush /Курсы /JAVA 25 SELF /Debug в IntelliJ IDEA

Debug в IntelliJ IDEA

JAVA 25 SELF
14 уровень , 6 лекция
Открыта

1. Bug

У программистов есть свой сленг. И первым словом, с которым вы познакомитесь плотно, будет баг (от англ. bug — жук). Это слово обозначает ошибку в программе, из-за которой она делает что-то не то, падает или выдает странный результат.

Если программа работает странно, но программист уверяет, что так и было задумано, обычно говорят: «Это не баг, это фича». Интернет полон мемов на эту тему.

Мем про баг и фичу

Историческая справка

Легенда гласит, что в сентябре 1947 года ученые Гарварда тестировали компьютер Mark II. Он сбоил. Проверив все контакты, они нашли настоящего мотылька, застрявшего между реле. Насекомое вклеили в журнал с подписью «First actual case of bug being found» (Первый реальный случай найденного жука).

С тех пор процесс поиска и устранения ошибок называют дебаг или отладка.

Фото первого бага в журнале


2. Debug Mode

Чтобы найти ошибку, программисты используют Debugger. Это специальный инструмент внутри IntelliJ IDEA, который позволяет поставить выполнение программы на паузу и заглянуть ей "под капот".

Intellij IDEA может запустить вашу программу в двух режимах:

Режим Иконка Горячие клавиши Суть
Run (Обычный) Иконка Play Shift+F10 (Win/Lin)
Ctrl+R (Mac)
Программа просто пробегает от начала до конца.
Debug (Отладка) Иконка Жука Shift+F9 (Win/Lin)
Ctrl+D (Mac)
Программа может останавливаться в указанных местах.

В режиме отладки вы можете выполнять программу построчно (строка за строкой), наблюдая, как меняются значения переменных.

3. Точки остановки

Чтобы 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);  // <--- We want to stop here
            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);. Появится красный кружок.

IDEA Editor showing Java code with a red Breakpoint

Теперь запустите программу через Debug (иконка жука). Программа запустится и мгновенно "замерзнет" перед выполнением этой строки.

IDEA Debugger suspended at the breakpoint, showing highlighted execution line

4. Управление: F8, F7, F9

Когда программа стоит на паузе, у вас есть пульт управления в верхней части панели Debugger.

Debugger toolbar with Step Over, Step Into, Resume buttons highlighted

F8 — Шаг поверх (Step Over)

Нажмите F8. Программа выполнит текущую строку (вызовет метод, получит результат) и перейдет к следующей sum += result;.

Execution moved to sum += result; inline values visible]

Нажмите F8 еще раз. Программа сложит числа. Вы увидите, как значения переменных изменились.

Variables sum and result updated in the Variables pane

Нажмите F8 еще раз. Вы увидите вывод в консоль.

Console output showing Step 1]

Это основной способ перемещения: строка за строкой, не вдаваясь во внутренние детали методов.

F9 — Возобновить (Resume Program)

У нас цикл от 1 до 5. Нажимать F8 пять раз, чтобы пройти один круг цикла — долго. А если цикл на 1000 итераций?

Нажмите F9. Программа "отлипнет", выполнит весь остаток кода в текущей итерации, пойдет на второй круг и... снова остановится на Breakpoint.

Pressing F9 jumps to the next iteration of the loop, i=2

Таким образом, с помощью F9 вы можете быстро прокручивать циклы: один нажим — одна итерация.

Variables showing values for the second iteration]

F7 — Шаг внутрь (Step Into)

Если в коде встретится вызов вашего метода (в нашем случае calculateMultiply(i)), и вы нажмете F8, Дебаггер просто выполнит его и пойдет дальше. Но если вы хотите увидеть, как работает код внутри этого метода — жмите F7.

Попробуйте нажать F7, когда программа остановится на строке int result = calculateMultiply(i);. Дебаггер перенесет вас внутрь метода calculateMultiply, и вы увидите, как значение передается в параметр number.

Stepping into calculateMultiply(int number) method

Shift + F8 — Шаг наружу (Step Out)

Что делать, если вы нажали F7 случайно на строке System.out.println(...) и попали в дебри системного кода Java? Читать тысячи строк чужого кода скучно и непонятно.

Жмите Shift + F8. Программа быстро выполнит всё, что осталось в текущем методе, и вернет вас обратно туда, откуда вы пришли (в ваш метод main).

Stepping out of PrintStream/System.out method back to Main

5. Где смотреть значения?

Вернемся к нашему примеру с циклом.

Debugger window overview showing Variables and Frames tabs

Способ 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 посчитает результат, не меняя реальную программу. Это ваш черновик для экспериментов.

Evaluate Expression dialog showing sum + 100 with the evaluated result

7. Conditional Breakpoints

Представьте, что у вас цикл на 10 000 итераций, а ошибка происходит только на 5000-м шаге. Нажимать F9 пять тысяч раз — плохая идея.

Кликните правой кнопкой мыши по красному кружку Breakpoint. Появится всплывающее окно. В поле Condition напишите условие на Java, например: i == 5. Нажмите Done.

Right-click on a Breakpoint showing the Condition field with i == 5 entered

Теперь, если вы запустите Debugger, программа проигнорирует первые 4999 кругов и остановится только тогда, когда условие станет true. Это сэкономит вам часы работы!

8. Управление всеми точками остановки

Иногда новички ставят так много Breakpoints в разных файлах проекта, что программа потом постоянно останавливается в неожиданных местах. Искать красные кружки по всем файлам вручную — долго.

Нажмите Ctrl + Shift + F8 (Windows/Linux) или Cmd + Shift + F8 (macOS). Откроется окно Breakpoints.

Breakpoints window (Ctrl+Shift+F8) showing a list of all active breakpoints with checkboxes

Здесь вы видите список всех точек остановки в вашем проекте. Вы можете снять с них галочки (временно отключить) или удалить клавишей Delete.

9. Итоги

Мы рассмотрели основной арсенал Java-разработчика для поиска ошибок. Отладчик (Debugger) — это то, что превращает написание кода из "гадания на кофейной гуще" в точную инженерную работу.

Умение быстро находить причину ошибки — это навык, который ценится в коммерческой разработке даже выше, чем умение быстро писать код. Практикуйтесь с условными брейкпоинтами и Evaluation, и ни один баг от вас не скроется.

Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Yokei Уровень 18
4 октября 2025
3. Точка остановки (breakpoint). Справедливости ради 🤓, корректный вариант — «Точка останова». P.S. Про отсутствие друзей лучше не спрашивать...
Alex Blizz Уровень 17
24 октября 2025
После таких шикарных графиков, которые уже несколько раз попадались, я не удивлен