Слепые зоны отладки в VS Code

Слепые зоны отладки в VS Code

8 февраля 2023 г.

В первой главе моей книги по отладке я обсуждаю отладку IDE. В этой главе я в основном говорю об IntelliJ/IDEA. Меня часто спрашивают, почему я так мало написал о VS Code… Причина в том, что писать особо не о чем. Его отладчик проще в лучшую и в худшую сторону. Он не такой мощный, как другие IDE. Я создал следующее видео, которое охватывает содержание этого поста:

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

Это не критика VS Code или Microsoft. Visual Studio имеет один из самых мощных отладчиков. Но Visual Studio Code не имеет многих функций Visual Studio или других IDE. Я считаю, что это сделано намеренно. Я думаю, что это решение, основанное на пользовательском опыте, в котором они удалили функции, чтобы упростить использование. Одна вещь, которую VS Code преуспел, — это раскрытие функции logpoint (tracepoint), поэтому ее легче обнаружить случайному разработчику. Это здорово, и было бы непрактично, если бы в среде IDE были все важные функции.

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

Недостающие функции

Ниже приводится общий обзор отсутствующих функций.

Управление потоком

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

Существуют также функции пропуска кадров и выдачи исключений.

Справедливости ради следует отметить, что в VS Code есть «кадр перезапуска», который похож на «кадр пропуска» и тоже хорош.

Для

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

Вам нужно пропустить строку кода, потому что ваше приложение находится в проблемном состоянии, но вы все еще хотите выполнить отладку?

Перетащите вперед. Это фантастическая убойная функция, когда она вам нужна.

Область просмотра

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

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

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

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

Полевые точки наблюдения очень полезны при отслеживании изменений полей и новых значений.

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

Когда мы возвращаемся к задаче, мы можем мгновенно вернуться обратно!

В VS Code есть точки останова исключений. Но без фильтров - полный отстой!

Мы можем фильтровать попадания точки останова на основе нескольких критериев, таких как экземпляр, курс или конкретный метод в стеке. Я провел так много времени, нажимая «Продолжить» снова и снова. Мы можем уменьшить эту боль с помощью этих инструментов.

Массивы, коллекции и потоки

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

Речь идет о потоковом API Java 8 и более новых версиях, который представляет собой конструкцию функционального программирования. Это фантастический инструмент, но он затрудняет отладку. потоковый отладчик заимствует концепции из отладчиков путешествий во времени, что иногда упрощает потоковую отладку по сравнению с обычной отладкой.< /p>

Отрисовка записи

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

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

Потоковая и асинхронная отладка

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

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

Память

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

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

Наконец-то

Многого я не упомянул, потому что их слишком много. Я не думаю, что VS Code изначально плох. Это просто пошло на простоту. Лично я считаю себя опытным пользователем. Если вы похожи на меня, я надеюсь, что этот пост дал вам представление о том, чего вам не хватает.

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


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