Рубрики
Без рубрики

Учебное пособие по отладке 1 – Введение: Условные Точки останова

Первый пост в (надеюсь) длинной серии, охватывающей все, что вам нужно знать об отладке в… С тегами javascript, python, java, для начинающих.

Первый пост в (надеюсь) длинной серии, охватывающей все, что вам нужно знать об отладке в VS Code, IntelliJ/IDEA в Java, NodeJS, Kotlin и Python.

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

  • IntelliJ/IDEA – с Java/Kotlin
  • PyCharm – Python
  • VSCode – для JavaScript
  • WebStorm – для JavaScript

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

Обратите внимание, что, хотя я не буду описывать TypeScript, все, что обсуждается в руководстве по JavaScript, применимо и к TypeScript. То же самое относится и к большинству языков JVM, таких как Scala и т.д.

Обычно люди разделяют эти учебные пособия на основе IDE/языка. Я думаю, что объединение их всех вместе полезно для получения “общей картины”. Мы также продвигаемся по языкам/IDE в нашей карьере, и полезно иметь более широкую точку зрения.

В следующем посте я также хотел бы рассказать об отладке браузера с помощью Chrome DevTools и Firefox Web Developer Tools. Однако это немного другой процесс, поэтому я пока оставлю их в стороне.

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

Мотивация

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

Но вы, возможно, спрашиваете себя, зачем вообще проходить через это?

Зачем нам нужно проходить учебное пособие по отладке? Я уже знаю, что программирование и использование отладчика – это не совсем ракетостроение…

Что ж… Согласно этому исследованию , мы тратим 50% нашего времени на поиск ошибок, хотя я видел цифры в диапазоне от 25% до 75%. К сожалению, этому навыку на самом деле не учат в университетах. Даже на нашей работе люди замалчивают этот важный навык. Есть книги, которые охватывают эту тему, но многие из них устарели и нацелены на более сложные сценарии.

Отладка – это не просто поиск ошибок. Когда мне нужно реализовать новую функцию в области кода, с которой я незнаком, я часто запускаю отладчик и начинаю отлаживать эти области. Пытаюсь смотреть на поток так, как будто я отлаживаю проблему. Проверка стека, элементов и т.д., Чтобы лучше понять, как работает система, и подтвердить мои предположения.

приступая к работе

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

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

Существуют его версии для различных языков:

  • JavaJava
  • Котлин
  • https://gist.github.com/shai-almog/c454d39464ca2893c014807838c5102f Python
  • https://gist.github.com/shai-almog/8c8bbbb4297f758f7ce1d5f7a4cc1c74 JavaScript

Загрузите соответствующий исходный файл и добавьте его в качестве основного исходного файла в новый проект в вашей среде IDE. Вы можете запустить приложение, но имейте в виду, что оно будет работать ОЧЕНЬ долго в поисках простых чисел.

Простая Условная Точка Останова

Сначала нам нужно отладить приложение. В Idea от JetBrains мы просто щелкаем правой кнопкой мыши исполняемый файл и выбираем debug как таковой:

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

То же самое верно и для VSCode. Выберите вид отладки слева от IDE и нажмите кнопку “Выполнить и отладить”.

Вам будет предложено указать среду для использования, выберите Node.js чтобы продолжить.

Как только вы начнете отладку, вы можете установить точку останова, щелкнув один раз по области “желоб” слева от файла. Давайте проведем небольшой эксперимент для каждого типа файла/IDE.

Бегущий

Работает на JetBrains IntelliJ/IDEA

Работает на VSCode

Мы помещаем точку останова на строку в файле. Обратите внимание, что файл Java является более сложным, чем другие основные основные файлы:

  • Для Java поместите точку останова в строку 28
  • Для линии Котлин 21
  • Для JavaScript строка 11
  • Для Python строка 11

Как только точка останова будет достигнута, вы сможете увидеть трассировку стека в левом нижнем углу. Трассировка стека представляет методы, которые вызвали текущий метод. В верхней части стека вы видите текущий метод. Вы можете нажать на каждый “фрейм стека”, чтобы перейти к просмотру вызывающего объекта и состояния переменных внутри фрейма вызывающего объекта.

В правом нижнем углу (для JetBrains) или в левом верхнем углу для VSCode вы можете увидеть переменные в текущем фрейме стека. Обратите внимание на n, которое является числом, которое мы вычисляем. Обратите внимание, что это не примитив, а скорее BigInteger, который мы используем для поддержки фантастически больших чисел в Java (числа, потенциально превышающие 9 223 372 036 854 775807, что является пределом Long).

Мы можем изменять значения переменных, используя функцию “Установить значение”.:

Значение настройки в JetBrains

Установка значения в VSCode

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

Приятная функция JetBrains позволяет просматривать значение по-разному, например, как шестнадцатеричное, двоичное и т.д.:

Наконец, мы можем щелкнуть правой кнопкой мыши на точке останова, чтобы отредактировать ее. Мы можем установить условие для точки останова, которое остановит выполнение только в том случае, если условие будет выполнено:

Условная точка останова в JetBrains на IntelliJ/IDEA

Условная точка останова добавляется с помощью редактирования точки останова в VS Code

Редактирование условной точки останова в VS Code

Поскольку код Java немного отличается, я использовал primesToTest[0] , который всегда будет иметь значение true. Вы можете попробовать установить его на 3, что займет много времени, и вы можете видеть, что он остановится только в этот момент.

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

Продолжая в том же духе

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

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

TL;DR

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

Оригинал: “https://dev.to/codenameone/debugging-tutorial-1-introduction-conditional-breakpoints-3ni3”