Все мы, разработчики, знакомы с отладчиками и используем их ежедневно - они важная часть процесса программирования.
Но давайте будем честными. Обычно мы используем только опцию точки останова. При большом желании мы можем использовать условную точку останова.
Но знаете что, отладчик IntelliJ IDEA имеет множество мощных и передовых функций, которые полезны для более эффективной и простой отладки.
Чтобы помочь вам, мы составили список советов и приемов от наших разработчиков в Lightrun. Мы надеемся, что эти советы помогут вам быстрее находить и устранять ошибки.
Давайте начнем.
1. Используйте точки останова по исключениям
Точки останова - это места в коде, которые позволяют остановить программу и включить отладку. Они позволяют изучить поведение кода и его функции, чтобы попытаться определить ошибку.
IntelliJ предлагает широкий спектр точек останова, включая точки останова по строкам, точки останова для методов и точки останова по исключениям.
Мы рекомендуем использовать точку останова по исключениям. Этот тип точки останова приостанавливает выполнение программы в соответствии с типом исключения, а не в заранее определенном месте. Мы особенно рекомендуем точку останова IntelliJ Exception, потому что вы также можете фильтровать класс или пакет, частью которого являются исключения.
Таким образом, вы можете определить точку останова, которая остановится на строке, генерирующей исключение NullPointerException и игнорирует исключения, генерируемые из файлов, принадлежащих другим библиотекам.
Для этого вам нужно определить пакет, в котором находятся файлы вашего проекта. Это поможет вам сфокусировать анализ поведения вашего кода.
Lightrun предлагает моментальные снимки - точки останова, которые не останавливают работу программы. Узнайте больше здесь.
2. Используйте условия в ваших точках останова
Это один из самых малоиспользуемых инструментов в отладчиках и, возможно, один из самых эффективных. Используйте условия, чтобы сузить круг проблем гораздо проще и сэкономить время и усилия по поиску проблем. Например, в цикле вы можете определить точку останова, которая остановится только при фактической ошибке, избавляя вас от ручного обхода циклов, пока вы не столкнетесь с проблемой!
В приведенном ниже цикле вы можете видеть, что точка останова остановит сервис, когда значение идентификатора агента равно нулю. Таким образом, вместо того, чтобы генерировать исключение с null указателем, мы сможем проверить текущее состояние VM (виртуальной машины) до того, как это произойдет.
Обратите внимание, что условие может быть очень сложным и даже вызывать методы как часть условия.
Lightrun предлагает условия для всех действий: снимки, логи и т. д. Подробнее читайте здесь.
3. Включите меню «Internal Actions» для разработки собственных плагинов.
Если вы пишете собственный плагин IntelliJ IDEA, включите внутренние действия (Tools -> Internal Actions) для упрощения отладки. Эта функция включает в себя множество удобных опций, таких как инспектор компонентов и отладчик пользовательского интерфейса. Всегда удобно иметь в своем распоряжении широкий набор инструментов, предоставляющих вам возможности, о которых вы, возможно, никогда не думали.
Чтобы включить внутренние действия, выберите «Help -> Edit Custom Properties». Затем введите idea.is.internal=true
и сохраните. После перезапуска вы должны увидеть новую опцию в меню «Tools».
4. Используйте функцию «Analyze Thread Dump».
Дамп потока - это моментальный снимок, который показывает, что каждый поток делает в определенное время. Дампы потоков используются для диагностики системы и проблем с производительностью. Анализ дампов потоков позволит вам выявить тупиковые ситуации или проблемы конкуренции.
Мы рекомендуем использовать функцию IntelliJ «Analyze Thread Dump» из-за ее удобных возможностей просмотра, которые упрощают анализ дампа. «Analyze Thread Dump» автоматически обнаруживает трассировку стека в буфере обмена и мгновенно помещает ее со ссылками на исходный код. Эта возможность очень полезна при просмотре дампов стека из журналов сервера, потому что вы можете мгновенно перейти к соответствующим файлам, как при локальной трассировке стека.
Чтобы получить доступ к функции, перейдите в меню «Analyze». IDE поддерживает активацию этой функции динамически, когда IDE обнаруживает трассировку стека в буфере обмена.
5. Используйте отладчик потока.
Потоки Java 8 очень удобны в использовании, но, как известно, их сложно отлаживать. Потоки объединяют несколько функций в один оператор, поэтому простое переключение операторов с помощью отладчика нецелесообразно. Вместо этого вам понадобится инструмент, который поможет вам проанализировать, что происходит внутри потока.
В IntelliJ появился новый классный инструмент - Stream Debugger. Вы можете использовать его для визуальной проверки результатов потоковой операции. При достижении точки останова в потоке нажмите значок отладчика потока в отладчике. Вы увидите отображение пользовательского интерфейса значения элементов потока на каждом этапе/функции потока. Таким образом, визуализируется каждый шаг, и вы можете видеть операции в потоке и обнаруживать проблему.
6. Используйте точку наблюдения за полем (Field Watchpoints)
Точка наблюдения за полем - это точка останова, приостанавливающая выполнение программы при доступе к заданному полю или его изменении.
Она может быть очень полезно, когда вы исследуете и обнаруживаете, что поле имеет неправильное значение, и вы не знаете, почему. Наблюдение за этим полем может помочь определить причину неисправности.
Чтобы установить эту точку останова, просто добавьте ее в строку нужного поля. Программа будет приостановлена, когда, например, будет изменено поле:
7. Отладка микросервисов с помощью подключаемого модуля Lightrun.
Плагин Lightrun IntelliJ позволяет добавлять журналы, снимки состояния и показатели производительности во время работы сервиса. Это означает, что вы можете добавлять инструменты в производственную и промежуточную среды. Вы можете отлаживать монолитные микросервисы, Kubernetes, K8, Docker Swarm, ECS, Big Data Workers, бессерверную систему и многое другое. Поддержка нескольких экземпляров доступна через механизм тегов.
Плагин Lightrun полезен для экономии времени, поэтому вместо многократных итераций локального воспроизведения сред, перезапусков и повторных развертываний вы можете выполнять отладку прямо в производственной среде.
8. Используйте друга - реального или воображаемого.
Когда дело доходит до мозгового штурма, 1 + 1 = 3. А когда дело доходит до решения сложных проблем отладки, вам понадобятся все умственные способности, которые вы можете использовать.
Работа с кем-то позволяет по-новому взглянуть на проблему по-другому и может выявить детали, которые вы упустили.
Или вы оба дополняете друг друга, пока не достигнете решения. Просто задавая друг другу вопросы и опровергая некоторые предположения друг друга, вы придете к новым выводам, которые помогут вам найти проблемы.
Вы также можете использовать друг друга для «Rubber Duck Debugging», или, как мы любим это называть, «Cheetah debugging».
Мы надеемся, что эти советы наших разработчиков помогут вам в отладке. Не стесняйтесь делиться с нами своими советами по отладке и передовыми методами, а также делиться этой записью в блоге, чтобы помочь другим.
Вы можете найти список онлайн сообществ разработчиков Java здесь.
Как мы уже упоминали в подсказке № 7, плагин Lightrun IntelliJ позволяет разработчикам отлаживать живые микросервисы, не прерывая их. Вы можете безопасно добавлять журналы и показатели производительности в производственную и промежуточную среду в режиме реального времени по запросу. Запросите демонстрацию и узнайте больше.
Комментарии (6)
BreathDeeper
18.11.2021 17:57-3"Точка останова" это уже слишком.
Можно было бы перечитать перевод перед публикацией и заменить гуглопереводный вариант хотя бы на "контрольную точку", как предлагает википедия.
Neyury
18.11.2021 19:14+3А что не так с точкой останова? Вот она на вики, к примеру для меня это более понятный и однозначный перевод в сравнении с "контрольная точка"
martin_wanderer
18.11.2021 20:54+6С чего вдруг принятый в русской технической литературе термин стал "гуглопереводным вариантом"?
lvo
19.11.2021 18:23Это всё видно в UI брейкпоинтов, далеко за такими фичами ходить не надо. Вот по-настоящему недооценённая и труднонаходимая фича дебаггера — это async stack traces.
ComatoZZZ
25.11.2021 10:50Для удаленного дебага удобно пользоваться желтыми брейкпоинтами, которые не останавливают выполнение программы. Так же удобно что в evaluate можно не просто выводить информацию но и менять значения переменных. Периодически использую такой кейс в многопоточных приложениях:
В режиме удаленного дебага ставлю желтую точку и меняю значения переменной в автоматическом режиме. Смотрю как себя ведет программа и если поведение подходит уже вношу изменения в код.
csl
Также сниппеты кода могут быть выполнены (как в REPL) во время отладки (спасибо этому комменту, натолкнувшему на мысль https://habr.com/ru/post/589605/comments/#comment_23712921 )