В общем случае отладка представляет процесс поиска ошибок и багов в программе. Для выполнения отладки применяется специальный инструмент - отладчик. Но кроме поиска багов и ошибок отладка и отладчик предоставляют прекрасный способ понять поток и выполнение программы, происходящие в ней действия, как эти действия выполняются в программе и в конечном счете обогатить навыки и понимание разработки.
Что касательно отладчиков для программ на языке JavaScript, то мы можем использоваться отладчиками, встроенными в веб-браузеры. Многие распространенные веб-браузеры предоставляют возможность отладки. В данном же случае для отладки мы будем использовать встроенный отладчик в Chrome DevTools, так как Google Chrome представляет наиболее распростраенный браузер. Однако работа с отладчиками в других браузерах будет во многом похожей.
Рассмотрим следующую программу:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>METANIT.COM</title> </head> <body> <script> const numbers = [5, 3, 6, 2, 5, 1]; for(let i=0; i < numbers.length-1; i++){ for(let j=i+1; j < numbers.length; j++){ if(numbers[i] > numbers[j]){ const temp = numbers[j]; numbers[j] = numbers[i]; numbers[i] = temp; } } } console.log("numbers:", numbers); </script> </body> </html>
Здесь в коде JavaScript определена простейшая сортировка массива чисел. Сначала в цикле по i проходим по всем элементам массива вплоть до последнего (не включая), и сравниваем текущий элемент по i со всеми последующими элементами в цикле по j. Если один из последующих элементов (numbers[j]) меньше текщего элемента (numbers[i]), то меняем их местами. После того, как мы сравнивали текущий элемент numbers[i] со всеми последующими (numbers[j]) и поместили в numbers[i] наименьший элемент, увеличиваем значение i и переходим к сравнению следующего элемента со всеми последующими.
И чтобы детально посмотреть, как программа сортируем массив, воспользуемся отладкой. Для этого загрузим страницу с кодом JavaScript в Google Chrome и перейдем к инструментам разработчика (можно сделать с помощью комбинации клавиш Ctrl+Shift+I). Далее в панели инструментов разработчика откроем вкладку Sources
А в левом древовидном меню найдем файл, где у нас расположен код JavaScript (в моем случае это веб-страница index.html). И этот файл будет открыт в центральной части.
Чтобы иметь возможность инспектировать программу в определенной строке кода, надо на эту строку установить точку прерывания (breakpoint). В Chrome DevTools для этого достаточно нажать на номер нужной строки. После установки точки прерывания строка кода будет отмечена синий меткой:
Так, на скришншоте видно, что у меня точка прерывания установлена в файле index.html на 17-й строке:
const temp = numbers[j];
В качестве альтернативы можно нажать на номер строки кода и в появившемся контекстном меню выбрать пункт "Add breakpoint" для установки на указанную строку точки прерывания.
Чтобы удалить точку прерывания, достаточно нажать на синюю метку на номере строки.
Если мы обновим страницу в браузере, то при выполнении кода JavaScript программа остановится на установленной точке прерывания:
И в этой точке мы можем исследовать состояние программы на текущий момент.
При остановке на точке прерывания мы можем увидеть часть информации непосредственно в после с исходным кодом файла, например, навести на нужную нам переменную, и нам образится ее значение. Но для более подробной информации предназначена правая колонка, где можно посмотреть текущие значения глобальных и локальных переменных, значения параметров, стек вызова функций и прочую информацию:
Например, из вышеприведенного скриншота видно, что при первом выполнении 17-й строки значение переменной i равно 0, а значение переменной j равно 1.
С помощью кнопок над правой колонкой можно управлять ходом отладки:
Подобным образом мы можем установить множество точек прерывания и детально исследовать выполнение программы.
Кроме обычных точек прерывания Chrome DevTools позволяет устанавливать и другие типы точек прерывания. Так, условные точки прерывания позволяют остановить выполнение программы, если соблюдается некоторое условие. Точки прерывания DOM позволяют остановить выполнение при динамическом изменении содержимого веб-страницы. Точки преырвания обработчиков событий позволяют остановить выполнение, если сработало определенное событие веб-страницы. Точки прерывания XHR позволяют остановить программу при выполнении Ajax-запроса. И таким образом, мы можем детально исследовать различные аспекты работы программы.