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

Фрагменты в Chrome Dev Tools позволяют отлаживать JavaScript аналогично тому, как вы отлаживаете другие популярные языки с их соответствующими IDE, например C # с Visual Studio или Java с IntelliJ IDEA.

Стоит упомянуть такие функции, как вставка (условных) точек останова, просмотр стека вызовов / локальной области видимости, оценка выражений в консоли во время отладки.

Как запускать сниппеты

  1. Перейдите к настройкам ›дополнительные инструменты› Инструменты разработчика. (Или просто cmd + shift + i / ctrl + shift + i)
  2. На внутренней вкладке нажмите на крошечную двойную стрелку (››) рядом с источниками и выберите «фрагменты».
  3. Нажмите «+ New Snippet» и начните писать свои функции / скопируйте и вставьте свою функцию из текстового редактора.

Вот что у вас должно получиться:

Использование отладчика

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

Установите точку останова на любой строке, щелкнув номер строки. Другой вариант - включить оператор ‘debugger;’ над строкой, выполнение которой нужно приостановить.

  • Нажмите Command + Enter, чтобы запустить программу. Программа остановится на выбранной вами точке останова.

  • Нажмите «перейти» (вверху справа рядом с кнопкой возобновления), чтобы перейти к следующей строке кода. Если следующая строка является функцией, вы можете нажать «шаг вперед», чтобы пройти через выполнение функции.
  • В любой момент во время выполнения вы можете навести курсор мыши на переменные / объекты, чтобы просмотреть их состояние. Если вы работаете с объектами, вы можете просмотреть ВСЕ их свойства.

  • В любой момент в процессе отладки мы можем оценить выражения JavaScript в консоли.
  • В приведенном ниже случае мы можем ввести «y» в консоль, чтобы оценить его.

  • Стек вызовов показывает, какая функция вызвала текущую функцию. Это может быть очень полезно при отладке рекурсивных функций.
  • На изображении ниже интерпретатор в настоящее время выполняет функцию printResults. Поэтому на панели Стек вызовов справа есть синяя стрелка рядом с «printResults».
  • printResults был вызван swapNumbers. Следовательно, в стеке вызовов swapNumbers отображается под printResults. Я считаю, что это особенно полезно в рекурсивных функциях, чтобы отслеживать, сколько рекурсивных вызовов было сделано.

  • Панель область справа показывает переменные в лексической области видимости текущей функции, а также переменные в глобальной области видимости. В лексической области видимости printResult a = 2 и b = 1.
  • Мы также можем видеть, к чему относится ключевое слово «this».

Недостатки

Есть несколько ограничений на использование сниппетов.

  • Вы не можете напрямую загружать файл javascript (.js) со своего локального компьютера во фрагменты. Обычно я копирую и вставляю функцию, над которой работаю, во фрагменты, тестирую ее там, а затем копирую и вставляю окончательные результаты обратно в свой редактор, когда закончу.
  • Один из способов решения указанной выше проблемы - включить файл .js в тег скрипта файла index.html, а затем открыть файл index.html. После загрузки index.html запускается файл .js, который можно просмотреть на вкладке источников.
  • Хотя фрагменты кода сохраняются внутри Chrome Dev Tools, я не знаю, как сохранить их на локальном жестком диске.

Подводить итоги

Фрагменты могут быть чрезвычайно мощными при работе с функциями более высокого порядка, замыканиями, рекурсией и концепциями, которые мне еще предстоит изучить!

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

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