Я чувствую, что отладка является такой же важной частью цикла разработки, как и любая другая. Поэтому всегда полезно демистифицировать работу по отладке, делая ее более простой и менее трудоемкой, чтобы мы могли закончить работу вовремя и уменьшить стресс.
Как и большинство языков, Node предоставляет отличные инструменты отладки, которые позволяют легко находить и исправлять дефекты в коде. Я всегда выступаю за использование отладчика, потому что лично я нахожу, что использование отладчиков действительно исключает необходимость каких-либо догадок и делает нас лучшими разработчиками в целом.
Это руководство предназначено для разработчиков и администраторов, которые уже работают с Node. Это предполагает фундаментальное понимание языка на практическом уровне.
Использование отладчика
Node.js включает в себя полнофункциональную утилиту отладки вне процесса, доступную через простой протокол на основе TCP и встроенный клиент отладки.
Например, чтобы использовать отладчик для отладки файла с именем script.js
, вы можете просто вызвать узел, используя флаг debug
следующим образом:
1
2
3
4
|
$ node debug script.js
< debugger listening on port 5858
connecting… ok
debug>
|
Контрольные точки
Теперь, когда вы начали сеанс отладки, в любом месте вашего скрипта, из которого вы вызываете debugger
будет точка останова для отладчика.
Так, например, давайте добавим оператор отладчика в script.js:
1
2
3
4
5
6
|
foo = 2;
setTimeout(() => {
debugger;
console.log(‘bugger’);
}, 1000);
console.log(‘de’);
|
Теперь, если мы запустим этот скрипт, на нашей точке останова будет вызван отладчик, и мы можем контролировать управление скриптом с помощью команд cont
или next
(для краткости c
или n
).
Мы можем приостановить выполнение скрипта в любое время, используя p
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
$ node debug script.js
< debugger listening on port 5858
connecting… ok
break in /home/tom/web/envatodebug/myscript.js:1
1 foo = 5;
2 setTimeout(() => {
3 debugger;
debug> cont
< de
break in /home/tom/web/envatodebug/myscript.js:3
1 foo = 5;
2 setTimeout(() => {
3 debugger;
4 console.log(‘bugger’);
5 }, 1000);
debug> next
break in /home/tom/web/envatodebug/myscript.js:4
2 setTimeout(() => {
3 debugger;
4 console.log(‘bugger’);
5 }, 1000);
6 console.log(‘de’);
debug> next
< bugger
break in /home/tom/web/envatodebug/myscript.js:5
3 debugger;
4 console.log(‘bugger’);
5 }, 1000);
6 console.log(‘de’);
7
debug> quit
|
РЕПЛ
1
2
3
4
5
6
7
8
9
|
$ node debug script.js
< debugger listening on port 5858
connecting… ok
debug> repl
Press Ctrl + C to leave debug repl
> foo
2
> 2+2
4
|
Read-Eval-Print-Loop отладчика позволяет вводить код в интерактивном режиме во время выполнения и, таким образом, получать доступ к состоянию приложения и всех его переменных и методов в момент прерывания выполнения. Это очень мощный инструмент, который вы можете использовать для быстрой дезинфекции вашего приложения.
В общем, REPL доступен как автономно и как часть отладчика, и он позволяет вам запускать JavaScript в интерактивном режиме. Например, просто введите в node
строке node
без опций, и вам будет предоставлен интерфейс REPL, в который вы можете написать код и просмотреть вывод.
Вступление и выход
Ранее я упоминал команды cont
и next
( c
и n
), которые позволяют нам продолжать выполнение кода после достижения точки останова. В дополнение к этому, проходя код, мы также можем войти в метод или выйти в родительскую область.
Используйте команды step
для входа и out
для выхода или s
и o
для краткости.
обратная трассировка
Используйте backtrace
или bt
чтобы получить вывод обратной трассировки для текущего кадра выполнения.
Перезапуск
Используйте restart
или r
чтобы перезапустить ваш скрипт с начала выполнения.
Альтернативные способы подключения к отладчику
Опытные пользователи могут получить доступ к отладчику также, запустив Node.js с флагом командной строки --debug
, или, альтернативно, сигнализируя существующему процессу Node.js с помощью SIGUSR1
.
После того, как процесс был переведен в режим отладки таким образом, к нему можно подключиться с помощью отладчика Node.js, используя либо pid
запущенного процесса, либо через ссылку URI (например, localhost:port
) для подключения прослушивания. отладчик:
-
node debug -p <pid>
подключается к процессу черезpid
. -
node debug <URI>
подключается к процессу через URI, напримерlocalhost:5858
.
Использование Node Inspector
В дополнение к инструменту отладки CLI, Node Inspector также предоставляет инспектор GUI внутри веб-браузера (в настоящее время поддерживается только Chrome и Opera).
Чтобы использовать отладчик, просто установите так:
npm install -g node-inspector
Теперь, когда у нас установлен инспектор Node, мы можем отладить наш script.js с помощью:
node-debug script.js
Теперь ваша оболочка выведет следующее и, вероятно, откроет веб-браузер с URL-адресом, если Chrome или Opera установлены в качестве операционной системы по умолчанию в вашей операционной системе.
1
2
3
4
|
Node Inspector is now available from http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858
Debugging `script.js`
Debugger listening on port 5858
|
В вашем веб-браузере вы сможете отлаживать приложение в среде, аналогичной пакету инструментов разработчика. Установка точек останова и просмотр кода теперь интегрированы с вашим браузером. Наслаждайтесь!
Вывод
Отладка не должна быть кошмаром и стрессом.
Установка точек останова и пошаговое выполнение кода в Node очень проста. Это очень похоже на Ruby, и если вы пытаетесь понять, какое приложение вы получили, откройте приложение в режиме отладки и приостановите выполнение — это фантастический способ обучения в короткие сроки.