Отлаживайте как старший разработчик: поток управления отладкой программы

Отлаживайте как старший разработчик: поток управления отладкой программы

14 декабря 2022 г.

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

Я отснял около 4 часов видеоконтента и до сих пор не закончил 2-й модуль из восьми. Этот курс будет очень подробным и интенсивным.

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

Для меня важно, чтобы пользовательский опыт платформы курса был удовлетворительным. Поэтому я максимально избегал DRM. Надеюсь, люди будут уважать это и усилия, которые я вкладываю в это.

Я создаю платформу курса на Spring Boot 3 с GraalVM, поэтому в идеале она должна быть компактной, быстрой и довольно простой. Я планирую размещать видео на YouTube как видео, не включенные в список, чтобы обеспечить достойное впечатление от просмотра.

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

Мои рассуждения здесь - низкие накладные расходы и отличная производительность. Я также хотел бы сделать курс бесплатным через несколько лет. Используя YouTube, я могу сделать курс бесплатным, сделав видео общедоступными.

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

Не забудьте ознакомиться с моей книгой и подписаться на канал YouTube для будущих видео!

https://www.youtube.com/watch?v=GSeg5L31XXw?embedable=true

Расшифровка

Добро пожаловать во вторую часть книги "Отладка в масштабе", где вы узнаете секреты отладки.

В этом разделе мы обсудим самые основные аспекты отладки. Мы попали в точку останова. Что теперь?

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

Итак, что у нас сегодня на повестке дня?

Мы обсудим шаг за шагом и в код, я надеюсь, что большая часть этого списка вам знакома. Последние два пункта, где мы нарушаем поток управления, могут быть вам незнакомы. Я почти уверен, что большинство из вас не знакомы с последним пунктом повестки дня. Откуда я знаю? Оставайтесь с нами и узнайте!

Шаг вперед, внутрь, выход и сила

Пошаговое выполнение – это самая простая форма потока управления. Мы позволяем коду в строке выполняться, а затем можем проверить результаты на панели переменных. Это просто и легко.

В этом случае я просто нажал кнопку здесь пару раз, но я также мог просто нажать F8, чтобы получить тот же эффект…

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

У нас есть два шага в операции. Обычный и силовой шаг, в который обычно действует одинаково. Нам нужна принудительная версия, когда мы хотим перейти к API, который IntelliJ обычно пропускает. Мы можем нажать F7, чтобы войти в метод. Мы можем нажать Shift F7, чтобы принудительно войти внутрь.

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

Обратите внимание, что если у нас есть точка останова перед возвратом, он все равно остановится в точке останова, как мы видим в этом случае. Мы можем нажать эту кнопку здесь, чтобы выйти, или мы можем нажать Shift-F8, чтобы сделать то же самое.

Продолжить и перейти к курсору

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

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

Мы можем нажать эту кнопку, чтобы перейти к курсору, или мы можем использовать ALT-F9 в качестве ярлыка для этой функции.

Принудительный возврат и исключение

Эта функция называется принудительным возвратом в IntelliJ/IDEA.

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

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

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

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

Здесь значение — логическая переменная, так что все просто. Но ваш код может возвращать объект; используя эту технику, вы можете заменить этот объект произвольным значением. Хорошим примером может быть значение null. Что если этот метод вернет значение null, воспроизведет ли он проблему, с которой сталкивается мой пользователь?

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

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

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

Отменить кадр

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

Мы увидели, что я могу добраться до него в контекстном меню; вы также можете нажать здесь, чтобы активировать его.

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

Таким образом, если вы вошли в метод и переменные, которых нет в стеке, были изменены, они останутся измененными.

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

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

Это даже лучше, чем это!

Перейти к строке

Перейти к строке – секретная функция IntelliJ. Он работает, но разработчики об этом не знают. Вам необходимо установить плагин Jump to Line, чтобы использовать его. Поскольку у него относительно небольшое количество установок, я предполагаю, что люди просто не знают о его существовании. Потому что это обязательный плагин. Это изменит способ отладки!

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

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

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

Мы можем пропустить код, который дает сбой, и т. д. Это впечатляет. Мне не нужно перекомпилировать код. Если у вас когда-нибудь был случай, когда вы случайно перешагнули линию и сказали: «Упс. Это не то, чего я хотел».

Затем остановил отладчик и начал с нуля. Это плагин для вас. Это случилось со всеми!

Мы можем просто перетащить исполнение назад и переделать. Это просто фантастика!

Наконец-то

В следующем видео мы кратко обсудим часы. Мы углубимся в это в шестом видео серии. Так что следите за обновлениями!

Если у вас есть какие-либо вопросы, пожалуйста, используйте раздел комментариев. Спасибо!


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE