Отладчик
Node.js включает утилиту отладки вне процесса, доступную через протокол TCP и встроенный клиент отладки. Чтобы использовать её, запустите Node.js с аргументом debug, за которым следует путь к сценарию, который необходимо отладить; появится сообщение, указывающее на успешный запуск отладчика:
$ node debug myscript.js
< debugger listening on port 5858
connecting... ok
break in /home/indutny/Code/git/indutny/myscript.js:1
1 x = 5;
2 setTimeout(() => {
3 debugger;
debug>
Клиент отладки Node.js не является полноценным отладчиком, но простые шаги и инспекция возможны.
Вставка инструкции debugger; в исходный код сценария позволит установить точку останова в этом месте кода:
// myscript.js
x = 5;
setTimeout(() => {
debugger;
console.log('world');
}, 1000);
console.log('hello');
После запуска отладчика точка останова будет достигнута на строке 4:
$ node debug myscript.js
< debugger listening on port 5858
connecting... ok
break in /home/indutny/Code/git/indutny/myscript.js:1
1 x = 5;
2 setTimeout(() => {
3 debugger;
debug> cont
< hello
break in /home/indutny/Code/git/indutny/myscript.js:3
1 x = 5;
2 setTimeout(() => {
3 debugger;
4 console.log('world');
5 }, 1000);
debug> next
break in /home/indutny/Code/git/indutny/myscript.js:4
2 setTimeout(() => {
3 debugger;
4 console.log('world');
5 }, 1000);
6 console.log('hello');
debug> repl
Press Ctrl + C to leave debug repl
> x
5
> 2+2
4
debug> next
< world
break in /home/indutny/Code/git/indutny/myscript.js:5
3 debugger;
4 console.log('world');
5 }, 1000);
6 console.log('hello');
7
debug> quit
Команда repl позволяет удалённо оценивать код. Команда next переходит к следующей строке. Введите help, чтобы увидеть другие доступные команды.
Наблюдаемые значения
Возможна отслежка значений выражений и переменных во время отладки. На каждой точке останова каждое выражение из списка наблюдаемых значений будет вычислено в текущем контексте и отображено непосредственно перед списком исходного кода точки останова.
Чтобы начать наблюдение за выражением, введите 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 -
clearBreakpoint('script.js', 1),cb(...)- Очистить точку останова в script.js на строке 1
Также возможно установить точку останова в файле (модуле), который ещё не загружен:
$ node debug test/fixtures/break-in-module/main.js
< debugger listening on port 5858
connecting to port 5858... ok
break in test/fixtures/break-in-module/main.js:1
1 var mod = require('./mod.js');
2 mod.hello();
3 mod.hello();
debug> setBreakpoint('mod.js', 23)
Warning: script 'mod.js' was not loaded yet.
1 var mod = require('./mod.js');
2 mod.hello();
3 mod.hello();
debug> c
break in test/fixtures/break-in-module/mod.js:23
21
22 exports.hello = () => {
23 return 'hello from module';
24 };
25
debug>
Информация
-
backtrace,bt- Вывести трассировку стека текущей фрейма выполнения -
list(5)- Список исходного кода скриптов с контекстом из 5 строк (5 строк до и после) -
watch(expr)- Добавить выражение в список наблюдаемых значений -
unwatch(expr)- Удалить выражение из списка наблюдаемых значений -
watchers- Список всех наблюдаемых значений и их значений (автоматически перечисляется на каждой точке останова) -
repl- Открыть REPL отладчика для вычисления в контексте отлаживаемого скрипта -
exec expr- Выполнить выражение в контексте отлаживаемого скрипта
Управление выполнением
-
run- Запустить скрипт (автоматически запускается при запуске отладчика) -
restart- Перезапустить скрипт -
kill- Прервать выполнение скрипта
Разное
-
scripts- Список всех загруженных скриптов -
version- Отображение версии V8
Расширенное использование
Альтернативный способ включения и доступа к отладчику — запуск Node.js с флагом командной строки --debug или отправка сигнала существующему процессу Node.js с помощью SIGUSR1.
После того, как процесс переведён в режим отладки этим способом, к нему можно получить доступ с помощью отладчика Node.js, подключившись к pid работающего процесса или по ссылке на URI отслеживающего отладчика:
-
node debug -p <pid>- Подключается к процессу черезpid -
node debug <URI>- Подключается к процессу через URI, например, localhost:5858
© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v4.x/docs/api/debugger.html