Функции и методы отладки IDE, которые могут улучшить ваш процесс отладки

Отладка - одна из самых важных вещей в процессе разработки. Не только потому, что исправление ошибок занимает, вероятно, большую часть времени, но и отладка очень полезна при создании бизнес-логики, написании алгоритмов и тестировании кода.

Начнем с основ. В IntelliJ IDEA есть 4 типа точек останова.

Точка останова на строку

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

Точка останова метода

Останавливает приложение при входе или выходе из указанного метода или одной из его реализаций, позволяет вам проверить условия входа / выхода из метода. Этот тип точки останова может значительно замедлить процесс отладки, поэтому будьте осторожны с ней и используйте ее только тогда, когда она вам нужна.

Исключительная точка останова

Останавливает приложение при вызове Throwable.class или его подклассов.

Поле наблюдения

Останавливает приложение при чтении или записи указанного поля. Это позволяет вам реагировать на взаимодействия с конкретными переменными экземпляра. Например, посмотрите, как инициализируется свойство или какой метод изменил его значение.

Чтобы создать точку останова, используйте сочетание клавиш Ctrl + F8. В зависимости от того, где вы это делаете, будут созданы разные точки останова (строка, метод или поле).
Чтобы увидеть список всех точек останова, используйте Ctrl + Shift + F8.

Эта функция может сэкономить вам часы. Благодаря этой опции вам не нужно искать точки останова и вручную удалять их, если они останавливают выполнение кода, когда вы этого не хотите. Кроме того, он позволяет просто отключить точку останова. Отключенная точка останова не остановит ваш код во время отладки, но когда вам это нужно, вы можете легко активировать их снова, поэтому вам не нужно запоминать все важные места в проекте и каждый раз создавать и удалять точки останова.
Также в этом окне вы можете настроить все свои точки останова:

Приостановить

Определяет, следует ли останавливать выполнение приложения при достижении точки останова. Имеет два возможных значения All / Thread. Если выбран все, все потоки приостанавливаются, когда любой из потоков достигает точки останова. Если поток, приостанавливается только поток, попавший в точку останова.

Состояние

Этот параметр позволяет указать условие, которое проверяется каждый раз при достижении точки останова. Если условие возвращает значение true, указанное действие выполняется. В противном случае точка останова пропускается.

В качестве условия можно использовать:

  • Несколько операторов, включая объявления, циклы, анонимные классы и т. Д.
  • this (только в нестатическом контексте), например !(this instanceof User)
  • Проверить логические значения или выражения

Параметры ведения журнала

Когда достигается точка останова, в консоль может быть записано следующее:

  • Сообщение "Точка останова": сообщение журнала us Breakpoint reached at package.User.main(User.java:10)
  • Трассировка стека: трассировка стека для текущего кадра. Это полезно, если вы хотите проверить, какие методы были вызваны до достижения точки останова.
  • Вычислить и записать: результат произвольного выражения, например "Creating..." или users.size().

Удалить один раз ударил

Определяет, следует ли удалять точку останова из проекта после того, как она была достигнута один раз.

Отключить до достижения следующей точки останова

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

Фильтры

JetBrains IDE позволяет настраивать работу точки останова, отфильтровывая классы / экземпляры / методы и останавливая приложение только там, где это необходимо.

Доступны следующие типы фильтров:

  • Фильтры классов перехвата: остановите приложение, когда исключение будет перехвачено в указанных классах.
  • Фильтры экземпляров: ограничьте операцию точки останова указанными экземплярами объекта.
  • Фильтры классов: ограничьте операцию точки останова указанными классами.
  • Фильтры вызывающего абонента: ограничьте операцию точки останова в зависимости от вызывающего объекта текущего метода. Выберите этот параметр, если вам нужно остановиться в точке останова только тогда, когда метод вызывается из указанного метода.

Доступ к полю / модификация

  • Доступ к полю: выберите этот параметр, чтобы точка наблюдения работала при чтении поля.
  • Модификация поля: выберите, чтобы точка наблюдения работала при записи в поле.

Счетчик проходов

Определяет, должна ли точка останова работать только после того, как она будет достигнута определенное количество раз. Это удобно для отладки циклов или рекурсивных методов.

Пойманное / неперехваченное исключение

  • Перехваченное исключение: выберите, чтобы точка останова срабатывала при обнаружении указанного исключения.
  • Неперехваченное исключение: выберите, чтобы точка останова срабатывала, когда указанное исключение не было перехвачено. Это позволяет выяснить причину необработанных исключений.

Лучшие практики точки останова

Используйте точки останова для регистрации отладки, не используйте System.out.println

Используйте точки останова для ведения журнала вместо добавления System.out.print в свой код. Это обеспечивает более гибкий способ ведения журнала вашего приложения и предотвращает появление грязного кода и случайных изменений кода в коммитах git.

Используйте ярлыки для добавления точек останова, это сэкономит вам много времени

Использование ярлыков - хорошая перспектива для более продуктивного развития. Не забывай о них.

Организуйте групповые точки останова

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

Выясните основную причину фатальных ошибок

Точки останова исключения работают с Throwable.class. Вы можете добавить условие, которое поможет вам остановить выполнение кода только тогда, когда было сгенерировано Error.class, или вы можете сузить до MyCustomException.class.

Не используйте точки останова для методов, когда в этом нет необходимости.

Точки останова метода могут значительно замедлить выполнение вашего кода, что может отнять у вас много времени.

Не удаляйте точки останова полностью

Если в данный момент вам не нужна конкретная точка останова, не удаляйте ее полностью, вы можете просто отключить ее. Это может сэкономить много времени в будущем, когда вам нужно будет протестировать один и тот же блок кода, вам не нужно искать его в огромном проекте, вы можете просто активировать ту же точку останова еще раз.

Добавьте описание к точке останова

Это может помочь вам понять, зачем вам нужна эта точка останова при большом количестве точек останова.

Пошаговое выполнение программы

Пошаговый - это пошаговое выполнение программы.

Когда выполнение кода останавливается на вашей точке останова, вы можете перемещаться по коду с различными типами шагов. Вы можете увидеть панель шагов выше.

Давайте рассмотрим каждый шаг более подробно.

Перейти (F8)

Переход к текущей строке кода и переход к следующей строке. Реализация методов пропускается, и вы переходите к следующей строке текущего метода.

Войдите в (F7)

Шаги внутри метода, чтобы показать код внутри него. Этот вариант удобен, когда вы не уверены, что метод возвращает правильное значение.

Выйти (Shift + F8)

Выходит из текущего метода и переходит к вызывающему методу.

Бежать к курсору (Alt + F9)

Продолжает выполнение приложения до текущей позиции курсора.

Принудительно перейти (Shift + Alt + F8)

Переход к текущей строке кода и переход к следующей строке. Если в вызываемых методах есть точки останова, они игнорируются.

Падение кадра

Это позволяет вам отменить последний кадр и восстановить предыдущий кадр в стеке. Это может быть удобно, например, если вы случайно зашли слишком далеко или хотите ввести функцию, в которой вы пропустили критический блок кода.

Возобновить программу (Ctrl + F9)

Возобновляет выполнение вашего приложения до следующей точки останова.

Окно инструмента отладки

Когда вы запускаете процесс отладки, появляется окно инструмента Отладка. Это окно используется для управления сеансом отладки, отображения и анализа данных программы, а также выполнения различных действий по отладке.

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

Ознакомьтесь с лучшими практиками программы

Используйте Step Into даже для методов из внешних библиотек.

Иногда ошибки могут быть и во внешних библиотеках. Отладка внешней библиотеки может помочь вам найти неправильный код и сообщить об этом разработчикам этой библиотеки. Или проблема могла быть в другом. Если, например, метод из внешней библиотеки возвращает неожиданное значение, войдите в него, чтобы выяснить причину такого поведения, это может быть из-за неправильного метода объектов equals / hashcode / etc, или, возможно, некоторые классы этой библиотеки были переопределено в вашем проекте.

Используйте Показать точку выполнения

Если вы потеряли место остановки выполнения кода, используйте Показать точку выполнения (Alt + F10), чтобы перейти к достигнутой точке останова.

Взгляните на стопку вызовов

Иногда причина неожиданного поведения может быть где-то там, где у вас нет точек останова. Взгляните на стек вызовов, чтобы увидеть, какие методы были выполнены, это может помочь вам найти неправильный. Кроме того, если вы перейдете к другому методу через стек вызовов, вы сможете увидеть, какие параметры этот метод получил ранее.

Выражение, оценивающее

Кроме того, IntelliJ IDEA позволяет оценивать выражения в точке останова. Это очень удобный способ посмотреть, как метод ведет себя с другими значениями.

Чтобы оценить выражение, используйте кнопку Alt + F8 или Оценить.

Оценка передового опыта

Все оценивать

Если вам нужно протестировать свой метод с разными значениями, не создавать объекты вручную и перезапускать приложение, вы можете оценить метод с этими значениями, это может сэкономить вам много времени, а также вы увидите все свойства возвращенный объект.

Оценщик может выполнить все

IntelliJ IDEA позволяет вам оценивать не только ваш локальный метод, но и различные внешние или java.* методы. Оценщик даже может выполнять методы, которые отправляют запрос в другую службу, так что вы можете просмотреть подробный ответ.

Будьте осторожны с потоками

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

Иногда деббунг - это утомительный и длительный, но незаменимый процесс для каждого разработчика. А IntelliJ IDEA предоставляет функции и опции, которые делают его более удобным, простым и продуктивным. Нам может нравиться отладка или нет, но это то, что требует большей части разработки.

И, наконец, самая важная практика

Забудьте о кнопке Выполнить, используйте только Отладка, если вы разработчик 😀