Отладчик¶
Стабильность: 2 – Стабильная
АПИ является удовлетворительным. Совместимость с 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.js
.setBreakpoint('script.js', 1, 'num < 4')
,sb(...)
: Устанавливает условную точку останова на первой строкеscript.js
, которая прерывается только тогда, когдаnum < 4
оценивается вtrue
.clearBreakpoint('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
: Начать сеанс профилирования процессораprofileEnd
: Остановить текущий сеанс профилирования процессораprofiles
: Список всех завершенных сеансов профилирования процессораprofiles[n].save(filepath = 'node.cpupuprofile')
: Сохранить сессию профилирования процессора на диск в формате JSONtakeHeapSnapshot(filepath = 'node.heapsnapshot')
: Сделать снимок кучи и сохранить на диск в формате JSON
Контроль исполнения¶
run
: Запуск скрипта (автоматически запускается при старте отладчика)restart
: Перезапустить скриптkill
: Убить скрипт
Различные¶
scripts
: Список всех загруженных скриптовversion
: Отображение версии V8
Расширенное использование¶
Интеграция инспектора V8 для Node.js¶
Интеграция V8 Inspector позволяет прикрепить Chrome DevTools к экземплярам Node.js для отладки и профилирования. Он использует протокол Chrome DevTools Protocol.
V8 Inspector можно включить, передав флаг --inspect
при запуске приложения Node.js. Также можно указать пользовательский порт с этим флагом, например, --inspect=9222
будет принимать соединения DevTools на порту 9222.
Чтобы прервать работу на первой строке кода приложения, передайте флаг --inspect-brk
вместо --inspect
.
1 2 3 |
|
(В приведенном примере UUID dc9010dd-f8b8-4ac5-a510-c1a114ec7d29 в конце URL генерируется на лету, он меняется в разных сеансах отладки).
Если браузер Chrome старше 66.0.3345.0, используйте inspector.html
вместо js_app.html
в приведенном выше URL.
Chrome DevTools пока не поддерживает отладку рабочих потоков. Для их отладки можно использовать ndb.