Статьи

Отладка с Node.js

Я чувствую, что отладка является такой же важной частью цикла разработки, как и любая другая. Поэтому всегда полезно демистифицировать работу по отладке, делая ее более простой и менее трудоемкой, чтобы мы могли закончить работу вовремя и уменьшить стресс.

Как и большинство языков, 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 .

В дополнение к инструменту отладки 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, и если вы пытаетесь понять, какое приложение вы получили, откройте приложение в режиме отладки и приостановите выполнение — это фантастический способ обучения в короткие сроки.