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

1578

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

Прямо сейчас я в основном использую отладку предупреждений с такими инструкциями печати:

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

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

Фабиан Якобс
источник
3
Вы можете использовать Locus для внедрения в командной строке.
Али Давут
5
Если вы хотите отладить с традиционным подходом IDE, используйте vscode, используйте vscode youtube.com/watch?v=egBJ0cd0GLM
jw56578
4
Я нашел эту статью очень интересной, и она прекрасно работает для меня: отладка Node.js с помощью Chrome DevTools . Надеюсь, это поможет :)
Тимбергус
2
«тревожная отладка» :)
The Red Pea
Имейте в виду, что вам нужно запустить nod с --inspect-brkINSTEAD OF, --inspectесли вы хотите отлаживать реальный код сервера во время загрузки. См stackoverflow.com/questions/59596138
Jorge Orpinel

Ответы:

1261

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

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

npm install -g node-inspector

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

node-debug app.js
daralthus
источник
14
Желание узел-инспектор был активным. Компонент профилирования должен получить некоторую любовь.
Джонатан Думайн
13
К сожалению для меня, инспектор узлов не работает с последними версиями Node.js и не поддерживает вход в консоль браузера начиная с v0.1. нод-кодин просто глючил. Итак, я написал свой собственный модуль, чтобы помочь с отладкой, позволяя вам выводить объекты и тому подобное на консоль вашего веб-браузера. Я думал, что это может пригодиться кому-то еще: node-monkey . Плюс он работает как в Firefox, так и в Chrome.
Джастин Варкентин
7
Поскольку это был настолько удивительный и популярный инструмент, конечно, тот факт, что первоначальный автор признал, что у него больше нет ресурсов для его поддержки, не будет проблемой, поскольку сообщество разработчиков открытого исходного кода может поднять его?
PeterT
34
Теперь инспектор активно поддерживается StrongLoop и снова работает с последней версией (0.3). Объявление здесь: blog.strongloop.com/...
balupton
21
«Начиная с версии 6.3, Node.js предоставляет встроенный отладчик на основе DevTools, который в основном не поддерживает Node Inspector, см., Например, этот блог, чтобы начать работу. Встроенный отладчик разработан непосредственно командой V8 / Chromium и предоставляет некоторые усовершенствованные функции (например, длинные / асинхронные трассировки стека), которые слишком сложно реализовать в Node Inspector. " - говорит репо узла инспектора
ThisClark
750

Отладка

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

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

Heapdumps

Flamegraphs

трассировка

логирование

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

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

Бенчмаркинг

Другой

наследие

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

balupton
источник
8
О Nodetime: для тех, кто не хочет отправлять свои данные на серверы времени узла, существует локальная «альтернатива» (она все еще основана на времени узла) - lookмодуль, как указано в stackoverflow.com/questions/12864221/nodejs-memory- профилирование
действительно хорошо,
Я не считаю отчеты о процессорах из nodetime очень полезными: 1. Я просто получаю дерево методов без времени "self". 2. Похоже, что ветви деревьев обрезаны ниже определенного числа precentage. Эти 2 очень затрудняют понимание того, где процессор проводит большую часть своего времени.
shacharz
npm install -g profiler жалуется на отсутствие python в windows 7. Я пытался установить python = C: \ Python34 \, но это дает сбой.
Степан Яковенко
Единственный профилировщик, работающий из коробки - это nodetime. Но его трассировка стека профилирования процессора непригодна (он не дает достаточно подробностей). Инструменты Nodejs 4 msvc 2012 также имеют профилировщик, но также сообщают о критической нефиксированной ошибке ...
Степан Яковенко
Единственный профайлер, который работал на меня, был nprof + v8.logот node --prof.
Дан Абрамов
253

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

Фабиан Якобс
источник
12
Я заинтересован, после презентации в Google IO, которую сделали Пол Ирриш и Павел, теперь можно ли отлаживать node.js прямо в Chrome Developer Tools без необходимости затмения?
Балуптон
+1 Очень хорошо сработало для меня. Использование новой версии Eclipse 3.x, x64 для Mac OS X. Инструкции по установке также хорошо написаны. Спасибо.
бариста-любитель
Также входит в Nodeclipse nodeclipse.org (с некоторыми исправленными ошибками, связанными с Node.js)
Пол Верест
Мой вход на эту арену - trepanjs ( npmjs.com/package/trepanjs ). Он обладает всеми преимуществами отладчика узлов, но лучше соответствует gdb. Он также имеет больше функций и команд, таких как подсветка синтаксиса, более обширная онлайн-справка и более интеллектуальная оценка. Посмотрите github.com/rocky/trepanjs/wiki/Cool-things для некоторых из его интересных функций.
Рокки
1
Функция в настоящее время доступна в ночных версиях. Проверьте здесь для получения инструкций:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
zeronone
191

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

Узлы встроенный GUI отладчик

Просто передайте флаг инспектора, и вы получите URL для инспектора:

node --inspect server.js

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

Алистер
источник
2
Не для того, чтобы сбрасывать со счетов вышеупомянутые шаги, а просто для того, чтобы поделиться ... Я попытался создать оболочку, которая будет немного более надежной и простой в установке. См: github.com/jaridmargolin/inspect-process
Jarid Р. Марголина
1
@ JaridR. Марголин Ницца. Я обновил ответ, чтобы использовать его вместо этого.
Намного
2
Этот ответ в настоящее время находится внизу, и он единственный, который действительно работает для меня. Это круто!
LOAS
3
На случай, если это кому-нибудь поможет, я выложил видео, объясняющее этот процесс, на youtu.be/rtZKUnks6jI .
RoccoB
2
Где вы взяли темную тему для инструментов разработчика Chrome?
Питер Мейресоне
93

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

node debug script.js

Руководство: http://nodejs.org/api/debugger.html

JulianW
источник
1
Есть ли у вас ссылки на документацию о том, как его использовать?
Фабиан Якобс
2
У меня нет никаких документов. только что обновился до v0.3.5. поставить строку "отладчик"; в вашем коде, который будет действовать как точка останова. Это работает как ndb / gdb. после того, как вы выполните команду "debug script.js" типа help. вы увидите команду, которую он поддерживает. p = print, l = list ... так что вам не нужно вводить полный мир
JulianW
2
Обратите внимание, что под windows это "node.exe --debug myscript.js", но он все равно не работает.
Марк
6
Вы , возможно , придется изменить , --debugчтобы debugбез черточек. Вот так я наконец-то и начал работать. Это сбивает с толку --debugи debugделает две разные вещи.
Бенекаст
Как заставить программу работать? «r -> app is already running...», когда я пытаюсь продолжить и сталкиваюсь с оператором, который пытается получить ввод, он возвращает меня обратно в приглашение отладки, вместо того, чтобы позволить мне ввести требуемый ввод.
Майкл
70

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

VS Code дает такой же опыт отладки, как и в других IDE, таких как VS, Eclipse и т. Д.

введите описание изображения здесь введите описание изображения здесь

Shreyas
источник
Это круто, но у него есть отставание. Вот почему я предпочитаю Sublime всегда.
Кальбертс
3
но у возвышенного нет отладчика, и я думаю, что код VS тоже довольно быстрый
Сайед Файзан
1
У меня возвышенная лицензия с 5 лет назад. Так как несколько месяцев назад я даже не устанавливал Sublime Text, просто vscode. Из коробки есть много инструментов, которые мне не хватает в Sublime (например, встроенный терминал ...).
elboletaire
всегда спрашиваю у меня папку с конфигурацией, она не работает "из коробки"
carkod
@carkod включить vs код для автоматического присоединения и использовать терминал vs code для запуска вашего скрипта, ex node --inspect file-name.js
Vipul Dessai
57

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

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

Мои единственные «вопросы» / пожелания находятся были :

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

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

Отчет об ошибках

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

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

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

Следы стека

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

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

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


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

Если вы хотите посмотреть видео,

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

введите описание изображения здесь

Больно
смотреть на свои проблемы и знать,
что ты сам и никто другой не сделал это

Софокл, Аякс

Филип О'Брайен
источник
41

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

Скриншот

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

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

John81
источник
23

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

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

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

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

Введите описание изображения здесь

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

Установка:

npm install iron-node -g;

Debug:

iron-node yourscript.js;

Стефан Альф
источник
15

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

Учиха Итачи
источник
15

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

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

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

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

введите описание изображения здесь

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

введите описание изображения здесь

babidi
источник
13

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

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

var 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()
Blaine
источник
11

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

yojimbo87
источник
Cloud 9 - это то, что мне нужно, особенно это дает свободу кода в любом месте без моего ноутбука.
Теоман Шипахи
8

Запустите процесс вашего узла с флагом --inspect .

node --inspect index.js

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

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

Рахул Кумар
источник
7

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

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

Барион Ли
источник
7

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

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

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

Шахин Гиасси
источник
1
узел-инспектор уже упоминался; может быть, удалить этот ответ?
Дан Даскалеску
5

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

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

远 声 远 Shengyuan Lu
источник
5

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

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

CMD
источник
5

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

Nodeclipse стал № 1 в топ-10 новых плагинов Eclipse на 2013 год . Он использует модифицированный отладчик V8 (из Google Chrome Developer Tools для Java).

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

Пол Верест
источник
4

NetBeans IDE была Node.js поддержки начиная с версии 8.1 :

<...>

Новая особенность

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

  • Мастер создания нового Node.js
  • Новый мастер Node.js Express
  • Улучшенный редактор JavaScript
  • Новая поддержка для запуска приложений Node.js
  • Новая поддержка для отладки приложений Node.js.

<...>

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

  1. NetBeans Wiki / NewAndNoteworthyNB81 .
  2. Приложение Node.js Express в среде IDE NetBeans, Geertjan-Oracle .
Сергей Брунов
источник
4

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

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect
Захирул Хак
источник
3

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

$ 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и отладьте в браузере.

Герольд Майзингер
источник