Отладчик¶
Стабильность: 2 – Стабильная
API является удовлетворительным. Совместимость с npm имеет высший приоритет и не будет нарушена, кроме случаев явной необходимости.
Node.js включает утилиту отладки командной строки. Клиент отладчика Node.js не является полнофункциональным отладчиком, но доступны простой пошаговый режим и инспекция.
Чтобы воспользоваться ею, запустите Node.js с аргументом inspect, за которым укажите путь к отлаживаемому скрипту.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Отладчик автоматически останавливается на первой исполняемой строке. Чтобы вместо этого выполнение шло до первой точки останова (заданной оператором debugger), установите переменную окружения NODE_INSPECT_RESUME_ON_START в 1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | |
Команда repl позволяет вычислять код удалённо. Команда next переходит к следующей строке. Введите help, чтобы увидеть остальные доступные команды.
Нажатие enter без ввода команды повторяет предыдущую команду отладчика.
Наблюдатели¶
Во время отладки можно следить за значениями выражений и переменных. В каждой точке останова каждое выражение из списка наблюдателей вычисляется в текущем контексте и отображается непосредственно перед листингом исходного кода точки останова.
Чтобы начать наблюдение за выражением, введите watch('my_expression'). Команда watchers выводит активных наблюдателей. Чтобы удалить наблюдателя, введите unwatch('my_expression').
Справочник команд¶
Пошаговое выполнение¶
cont,c: продолжить выполнениеnext,n: шаг с обходом (следующая строка)step,s: шаг с заходомout,o: шаг с выходомpause: приостановить выполнение кода (как кнопка паузы в инструментах разработчика)
Точки останова¶
setBreakpoint(),sb(): установить точку останова на текущей строкеsetBreakpoint(line),sb(line): установить точку останова на указанной строкеsetBreakpoint('fn()'),sb(...): установить точку останова на первом операторе в теле функцииsetBreakpoint('script.js', 1),sb(...): установить точку останова на первой строке файлаscript.jssetBreakpoint('script.js', 1, 'num < 4'),sb(...): установить условную точку останова на первой строкеscript.js, которая срабатывает только когда выражениеnum < 4равноtrueclearBreakpoint('script.js', 1),cb(...): снять точку останова вscript.jsна строке 1
Также можно установить точку останова в файле (модуле), который ещё не загружен:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Также можно установить условную точку останова, которая срабатывает только когда заданное выражение вычисляется в true:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
Информация¶
backtrace,bt: вывести обратную трассировку текущего кадра выполненияlist(5): показать исходный код скриптов с контекстом в 5 строк (5 строк до и после)watch(expr): добавить выражение в список наблюдателейunwatch(expr): удалить выражение из списка наблюдателейunwatch(index): удалить выражение с указанным индексом из списка наблюдателейwatchers: перечислить всех наблюдателей и их значения (автоматически выводится в каждой точке останова)repl: открыть repl отладчика для вычислений в контексте отлаживаемого скриптаexec expr,p expr: выполнить выражение в контексте отлаживаемого скрипта и вывести его значениеprofile: начать сеанс профилирования CPUprofileEnd: завершить текущий сеанс профилирования CPUprofiles: перечислить все завершённые сеансы профилирования CPUprofiles[n].save(filepath = 'node.cpuprofile'): сохранить сеанс профилирования CPU на диск в формате JSONtakeHeapSnapshot(filepath = 'node.heapsnapshot'): сделать снимок кучи и сохранить на диск в формате JSON
Управление выполнением¶
run: запустить скрипт (выполняется автоматически при старте отладчика)restart: перезапустить скриптkill: завершить скрипт
Разное¶
scripts: перечислить все загруженные скриптыversion: показать версию V8
Расширенное использование¶
Интеграция V8 Inspector с Node.js¶
Интеграция V8 Inspector позволяет подключать Chrome DevTools к процессам Node.js для отладки и профилирования. Используется протокол Chrome DevTools.
V8 Inspector включается флагом --inspect при запуске приложения Node.js. Также можно указать свой порт, например --inspect=9222 — подключения DevTools будут приниматься на порту 9222.
При использовании флага --inspect код выполняется сразу, до подключения отладчика. То есть выполнение начинается до того, как вы сможете начать отладку, что может быть нежелательно, если нужно отлаживать с самого начала.
В таких случаях есть два варианта:
- Флаг
--inspect-wait: ожидает подключения отладчика перед выполнением кода. Позволяет начать отладку с самого начала выполнения. - Флаг
--inspect-brk: в отличие от--inspect, останавливается на первой строке кода сразу после подключения отладчика. Удобно для пошаговой отладки с самого начала без предварительного выполнения кода.
Выбирая между --inspect, --inspect-wait и --inspect-brk, учитывайте, нужно ли немедленное выполнение, ожидание подключения отладчика до старта или останов на первой строке для пошаговой отладки.
1 2 3 | |
(В примере выше UUID dc9010dd-f8b8-4ac5-a510-c1a114ec7d29 в конце URL генерируется на лету и отличается в разных сеансах отладки.)