Как отлаживать приложения Node.js?

1378

Как отлаживать серверное приложение Node.js?

В настоящее время я в основном использую отладочную информацию с инструкциями печати следующим образом:

sys.puts(sys.inspect(someVariable));

Должен быть лучший способ отладки. Я знаю, что Google Chrome имеет отладчик командной строки. Этот отладчик доступен и для Node.js?

  • 3
    Вы можете использовать Locus для внедрения в командной строке.
  • 5
    Если вы хотите отладить с традиционным IDE-подходом, используйте vscode, используйте vscode youtube.com/watch?v=egBJ0cd0GLM
Показать ещё 2 комментария
Теги:
google-chrome-devtools
debugging

35 ответов

227
Лучший ответ

Отладчик V8, выпущенный как часть инструментов разработчика Google Chrome, может использоваться для отладки сценариев Node.js. Подробное объяснение того, как это работает, можно найти в вики Node.js GitHub.

  • 12
    Я заинтересован, после презентации в Google IO, которую сделали Пол Ирриш и Павел, теперь можно ли отлаживать node.js прямо в Chrome Developer Tools без необходимости затмения?
  • 0
    +1 Очень хорошо сработало для меня. Использование новой версии Eclipse 3.x, x64 для Mac OS X. Инструкции по установке также хорошо написаны. Спасибо.
Показать ещё 5 комментариев
1151

node-inspector может спасти день! Используйте его из любого браузера, поддерживающего WebSocket. Точки останова, профилировщик, livecoding и т.д. Это действительно потрясающе.

Установите его с помощью:

npm install -g node-inspector

Затем запустите:

node-debug app.js
  • 14
    Желание узел-инспектор был активным. Компонент профилирования должен получить некоторую любовь.
  • 1
    Вы можете использовать github.com/ketamynx/node-codein вместо консоли инспектора узлов. Он может отображать объекты.
Показать ещё 16 комментариев
656

Отладка

Профилирование

  • node --prof ./app.js
  • node --prof-process ./the-generated-log-file

Heapdumps

Flamegraphs

Tracing

Вход

Библиотеки, выводящие информацию об отладке

Библиотеки, которые улучшают информацию трассировки стека

Бенчмаркинг

Другие

Наследство

Эти функции работают, но больше не поддерживаются или больше не применимы к современным версиям node.

  • 8
    О Nodetime: для тех, кто не хочет отправлять свои данные на серверы времени узла, существует локальная «альтернатива» (она все еще основана на времени узла), модуль look , как указано в stackoverflow.com/questions/12864221/nodejs-memory -profiling
  • 0
    Графы Falme уже в инструментах Chrome для разработчиков.
Показать ещё 6 комментариев
168

Node имеет свой собственный встроенный отладчик GUI с версии 6.3 (с использованием Chrome DevTools)

Изображение 2141

Просто передайте флаг инспектора, и вам будет предоставлен URL-адрес инспектора:

node --inspect server.js

Вы также можете разбить первую строку, перейдя вместо --inspect-brk.

Чтобы автоматически открыть окно Chrome, используйте модуль inspect-process.

# install inspect-process globally
npm install -g inspect-process

# start the debugger with inspect
inspect script.js
  • 2
    Не для того, чтобы сбрасывать со счетов вышеупомянутые шаги, а просто для того, чтобы поделиться ... Я попытался создать оболочку, которая будет немного более надежной, а также более простой в установке. Смотрите: github.com/jaridmargolin/inspect-process
  • 1
    @ JaridR. Марголин Ницца. Я обновил ответ, чтобы использовать его вместо этого. Намного проще в настройке и работает лучше :)
Показать ещё 6 комментариев
85

Node.js версия 0.3.4+ имеет встроенную поддержку отладки.

node debug script.js

Вручную: http://nodejs.org/api/debugger.html

  • 1
    Есть ли у вас ссылки на документацию о том, как его использовать?
  • 2
    У меня нет никаких документов. только что обновился до v0.3.5. поставить строку "отладчик"; в вашем коде, который будет действовать как точка останова. Это работает как ndb / gdb. после того, как вы выполните команду "debug script.js" типа help. вы увидите команду, которую он поддерживает. p = print, l = list ... так что вам не нужно вводить весь мир
Показать ещё 5 комментариев
61

Код Visual Studio будет моим выбором для отладки. Нет накладных расходов на установку каких-либо инструментов или npm install. Просто установите начальную точку вашего приложения в package.json и VSCode автоматически создаст файл конфигурации внутри вашего решения. Он основан на Electron, на котором построены редакторы, такие как Atom.

Код VS дает аналогичный отладочный опыт, как вы могли бы в других IDE, таких как VS, Eclipse и т.д.

Изображение 2142 Изображение 2143

  • 0
    Это круто, но у него есть отставание. Вот почему я предпочитаю Sublime когда-либо.
  • 3
    но у возвышенного нет отладчика, и я думаю, что код VS тоже довольно быстрый
Показать ещё 2 комментария
53

Я лично использую JetBrains WebStorm, так как это единственная JavaScript IDE, которую я нашел, которая отлично подходит как для внешнего интерфейса, так и для бэкэнд-кода JavaScript.

Он работает на нескольких ОС и имеет Node.js отладочную встроенную (а также тонну других вещей) (http://www.jetbrains.com/webstorm/features/index.html).

Мои единственные элементы "вопросов/пожеланий" - были:

  • Кажется, что на Mac больше ресурсов, чем Windows. Это больше не проблема в версии 6.
  • Было бы неплохо, если бы у него была поддержка Snippet (например, Sublime Text 2 - т.е. введите "fun" и нажмите "вкладка", чтобы вставить функция. См. комментарий @WickyNilliams ниже. С помощью Live Templates у вас также есть поддержка фрагментов.
  • 10
    У webstorm действительно есть поддержка сниппетов BTW ;-), хотя они называются «живыми шаблонами», а не сниппетами.
  • 2
    Если вы просто хотите отладить приложение node.js и уже имеете лицензию Intellij IDEA, вы можете просто установить плагин node.js, не покупая лицензию WebStorm. Настройка конфигурации запуска / отладки очень проста после установки плагина.
37

Theseus - это проект исследования Adobe, который позволяет отлаживать ваш код Node.js в редакторе Open Source Brackets. Он имеет некоторые интересные функции, такие как покрытие кода в реальном времени, ретроактивное обследование, асинхронное дерево вызовов.

Изображение 2144

  • 0
    это довольно круто, до сих пор не знаю, что такое Backtrace для Тхо
  • 0
    В настоящее время я люблю Тесея, но у меня все еще есть некоторые проблемы, когда мне нужно установить точку останова и проследить. В настоящее время мне нужно убить мое приложение, запустить узел с помощью --debug, отследить trhough, а затем запустить приложение с помощью node-theseus. Можно ли использовать Тесей с контрольными точками? Я пробовал искать по странице GitHub, StackOverflow и форумам, но пока безуспешно. Я что-то пропустил?
34

Здесь много замечательных ответов, но я хотел бы добавить свое мнение (исходя из того, как мой подход развился)

Журналы отладки

Посмотрим правде в глаза, мы все любим хороший console.log('Uh oh, if you reached here, you better run.'), и иногда это отлично работает, поэтому, если вы не согласны с тем, чтобы двигаться слишком далеко от него, по крайней мере, добавьте bling в свои журналы с помощью Отладка Visionmedia.

Интерактивная отладка

Так же удобно, как ведение журнала консоли, чтобы отлаживать профессионально, вам нужно засучить рукава и застрять. Установите точки останова, выполните свой код, просмотрите области и переменные, чтобы узнать, что вызывает это странное поведение. Как отмечали другие, node-inspector действительно является пчелиными колени. Он делает все, что вы можете сделать со встроенным отладчиком, но используя этот знакомый интерфейс Chrome DevTools. Если, как и я, вы используете Webstorm, тогда здесь является удобным руководством для отладки оттуда.

Трассировка стека

По умолчанию мы не можем проследить ряд операций в разных циклах цикла событий (тики). Чтобы обойти это, посмотрите longjohn (но не на производстве!).

Утечки памяти

С Node.js мы можем ожидать, что серверный процесс будет оставаться на значительное время. Что вы делаете, если думаете, что это вызвало некоторые неприятные утечки? Используйте heapdump и Chrome DevTools, чтобы сравнить некоторые снимки и посмотреть, что меняется.


Для некоторых полезных статей ознакомьтесь с

Если вам нравится смотреть видео (ы), то

Какой бы путь вы ни выбрали, просто убедитесь, что вы понимаете, как вы отлаживаете

Изображение 2145

Это болезненная вещь
Чтобы посмотреть на свои проблемы и узнать Что вы сами и никто другой не сделал это

Софокл, Аякс

21

Код Visual Studio имеет действительно приятную Node.js поддержку отладки. Он бесплатный, с открытым исходным кодом и кросс-платформенный и работает на Linux, OS X и Windows.

Вы даже можете отлаживать grunt и gulp задачи, если вам нужно...

  • 1
    Начиная с Visual Studio Code 8.0, поддержка отладки для OSX и Linux стала действительно хорошей.
  • 0
    Потратив целый вечер на то, чтобы заставить нод-инспектор и strongloop работать под Windows (сообщество Visual Studio, перейти на npm 2, установить переменные python, env, использовать cmd not babun / cygwin и т. Д. И т. Д.), А затем поиграть с этим в течение часа Я должен сказать, что это лучший вариант, по крайней мере, в Windows и, возможно, в целом (если у вас нет webstorn)
21

Node.js Инструменты для Visual Studio 2012 или 2013 включает отладчик. В обзоре здесь говорится: "Node.js Инструменты для Visual Studio включают полную поддержку отладки node приложений". Будучи новичком в Node.js, но имея фон в .NET, я нашел, что это добавление является отличным способом отладки приложений Node.js.

19

Я написал другой подход для отладки Node.js-кода, который является стабильным и чрезвычайно простым. Он доступен в https://github.com/s-a/iron-node.

Изображение 2146

Открытый межсетевой визуальный отладчик с открытым исходным кодом.

Установка:

npm install iron-node -g;

Debug:

iron-node yourscript.js;

13

Если вы используете Atom IDE, вы можете установить пакет node-debugger.

10

Я создал аккуратный маленький инструмент под названием pry.js, который может помочь вам.

Поместите простой оператор где-нибудь в свой код, запустите script нормально, а node остановит текущий поток, предоставив вам доступ ко всем вашим переменным и функциям. Просматривать/редактировать/удалять их по желанию!

pry = require('pryjs')

class FizzBuzz

  run: ->
    for i in [1..100]
      output = ''
      eval(pry.it) # magic
      output += "Fizz" if i % 3 is 0
      output += "Buzz" if i % 5 is 0
      console.log output || i

  bar: ->
    10

fizz = new FizzBuzz()
fizz.run()
9

Использование Chrome версии 67.0.3396.62 (+)

  1. Запустить приложение узла

узел --inspect-brk = 0.0.0.0: 9229 server.js (имя файла сервера js)

  1. Просмотрите ваше приложение в Chrome, например, "localhost: port"
  2. Откройте DevTools.
  3. Нажмите на значок узла рядом со значком адаптивного устройства.

Изображение 2147

Будет другое окно DevTools, которое будет появляться специально для отладки приложения узла.

Изображение 2148

9

Visual Studio Code будет работать для нас при отладке.

9

В Node.js есть встроенная командная строка клиент отладчика. Cloud 9 IDE также довольно приятный (визуальный) debugger.

  • 0
    Cloud 9 - это то, что мне нужно, особенно это дает свободу кода в любом месте без моего ноутбука.
8

Я собрал короткий Node.js отладочный праймер с помощью node-inspector для тех, кто не уверен, с чего начать.

6

Запустите процесс узла с помощью флага --inspect.

node --inspect index.js

а затем "Открыть chrome://inspect в хроме". Нажмите ссылку "Открыть выделенный DevTools для узла" или установите это расширение хром для быстрого открытия хром DevTools.

Для получения дополнительной информации обратитесь к этой ссылке

6

Использовать Webstorm! Он идеально подходит для отладки приложений Node.js. Он имеет встроенный отладчик. Ознакомьтесь с документами здесь: https://www.jetbrains.com/help/webstorm/2016.1/running-and-debugging-node-js.html

6

Предполагая, что на вашем компьютере установлен node -инспектор (если нет, просто введите "npm install -g node-inspector" ), вам просто нужно запустить:

node-inspector & node --debug-brk scriptFileName.js

И вставьте URI из командной строки в браузер WebKit (Chrome/Safari).

  • 1
    узел-инспектор уже упоминался; может быть, удалить этот ответ?
6

Если вам нужна мощная библиотека регистрации для Node.js, Tracer https://github.com/baryon/tracer - лучший выбор.

Он выводит сообщения журнала с меткой времени, именем файла, именем метода, номером строки, стеком путей или вызовов, поддержкой цветовой консоли и поддержкой базы данных, файла, потока транспорта. Я автор.

5

Существует новый проект Nodeclipse (в качестве плагина Eclipse или Enide Studio):

http://www.nodeclipse.org/img/Nodeclipse-1-debugging.png

Nodeclipse стал # 1 в Eclipse Top 10 NEW Plugins для 2013. Он использует измененный отладчик V8 (из инструментов разработчика Google Chrome для Java).

Nodeclipse - бесплатное программное обеспечение с открытым исходным кодом выпущено в начале каждого месяца.

4

Есть много возможностей...

Поддержка отладки часто реализуется с помощью v8 протокола отладки или более нового Протокол отладки Chrome.

4

IntelliJ прекрасно работает для Node.js.

Кроме того, IntelliJ хорошо поддерживает "Code Assistance".

3

NetBeans У IDE была поддержка Node.js, поскольку версия 8.1:

<... >

Основные особенности функции

Node.js Разработка приложений

  • Новый мастер проекта Node.js
  • Новый Node.js Экспресс-мастер
  • Расширенный редактор JavaScript
  • Новая поддержка для запуска приложений Node.js
  • Новая поддержка отладки приложений Node.js.

<... >

Дополнительные ссылки:

3

Быстрый и грязный способ отладки небольших сценариев Node.js с вашим любимым отладчиком браузера будет состоять в использовании браузера. Обратите внимание, что этот подход не работает с любыми приложениями, для которых требуются собственные библиотеки ввода-вывода, но он подходит для большинства небольших скриптов.

$ npm install -g browserify

Теперь переместите все ваши вызовы var x = requires('x') в файл requires.js и запустите:

$ browserify requires.js -s window -o bundle.js

(Недостатком здесь является то, что вам нужно либо перемещать, либо комментировать requires во всех ваших файлах.)

Включите bundle.js в файл HTML следующим образом:

<script type="text/javascript" src="bundle.js"></script>

Загрузите файл в свой браузер и нажмите F12 и альт: отлаживайте в браузере.

2

Используйте эти команды

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect
2
node-debug -p 8888 scriptFileName.js
1

Вы можете использовать чистый Node.js и отлаживать приложение на консоли, если хотите.

Например, создайте файл dummy debug.js который мы хотим отлаживать и помещать в него контрольные точки (инструкция debugger):

let a = 5;
debugger;

a *= 2;
debugger;

let b = 10;
debugger;

let c = a + b;
debugger;

console.log(c);

Затем вы можете запустить этот файл для отладки с помощью команды inspect:

node inspect debug.js

Это запустит отладчик в консоли, и вы увидите результат, похожий на:

< Debugger listening on ws://127.0.0.1:9229/6da25f21-63a0-480d-b128-83a792b516fc
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in debug.js:1
> 1 (function (exports, require, module, __filename, __dirname) { let a = 5;
  2 debugger;
  3

Вы можете заметить здесь, что выполнение файла было остановлено на первой строке. С этого момента вы можете пройти через файл шаг за шагом, используя следующие команды (горячие клавиши):

  • cont продолжения,
  • next с переходом к следующей точке останова,
  • in к шагу в,
  • out выйти
  • pause чтобы приостановить его

Пусть тип cont несколько раз и посмотрим, как мы получаем от точки останова до точки останова:

debug> next
break in misc/debug.js:1
> 1 (function (exports, require, module, __filename, __dirname) { let a = 5;
  2 debugger;
  3
debug> next
break in misc/debug.js:2
  1 (function (exports, require, module, __filename, __dirname) { let a = 5;
> 2 debugger;
  3
  4 a *= 2;
debug> next
break in misc/debug.js:4
  2 debugger;
  3
> 4 a *= 2;
  5 debugger;
  6

Теперь мы можем проверить значения переменных в этой точке, написав команду repl. Это позволит вам написать имя переменной и увидеть ее значение:

debug> repl
Press Ctrl + C to leave debug repl
> a
5
> b
undefined
> c
undefined
>

Вы можете видеть, что в настоящий момент мы имеем a = 5 а b и c не определены.

Конечно, для более сложной отладки вы можете использовать некоторые внешние инструменты (IDE, браузер). Вы можете прочитать здесь больше.

1

Мой оригинальный ответ был пару лет назад предварительно визуальной студии.

Итак, использование GOOD by hapi - отличный пакет для ведения журналов, но для отладки используйте visual studio.

оригинальный ответ (давным-давно): я бы использовал GOOD от Walmart Labs. Это сделает работу, и это очень гибко:

var hapi = require('hapi');
var good = require('good');
var server = hapi.createServer('localhost', 5000,{});
server.route({SOME ROUTE HERE});
server.start();

var options = {
subscribers: {
    'console':               ['ops', 'request', 'log', 'error'],
    'http://localhost/logs': ['log']
    }
};
server.pack.require('good', options, function (err) {

    if (!err) {
        console.log('Plugin loaded successfully');
    }
});
  • 3
    Можете ли вы рассказать о том, как вы используете это для отладки node.js? Спасибо!
  • 0
    да, вот пример: var hapi = require ('hapi'); var good = require ('good'); var server = hapi.createServer ('localhost', 5000, {}); server.route ({НЕКОТОРЫЙ МАРШРУТ ЗДЕСЬ}); server.start (); var options = {подписчики: {'console': ['ops', 'request', 'log', 'error'], ' localhost / logs ': ['log']}}; server.pack.require ('good', options, function (err) {if (! err) {console.log ('Плагин успешно загружен');}});
Показать ещё 5 комментариев
0

Инструменты Chrome для разработчиков - это простой способ начать отладку кода на стороне клиента. Вот шаги для отладки приложения узла с помощью инструментов разработчика Chrome. проверьте подробности здесь

Изображение 2149

0

ndb - это улучшенная отладка для Node.js, включенная Chrome DevTools

https://github.com/GoogleChromeLabs/ndb

0

Существуют способы отладки приложения Node.JS следующим образом:

1) Установите devtool и запустите приложение с ним

npm install devtool -g --save
devtool server.js

это откроется в режиме разработки Chrome, чтобы вы могли поставить точку отладки и проверить.

2) отладка с узлом-инспектором

node-inspector

3) отладка с --debug

node --debug app.js 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню