Як налагодити програми 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

Майте на увазі, що вам потрібно запустити кивок за допомогою --inspect-brkINSTEAD OF, --inspectякщо ви хочете налагодити фактичний код сервера під час завантаження. Див stackoverflow.com/questions/59596138
Jorge Orpinel

Відповіді:


1261

вузол-інспектор міг би врятувати день! Використовуйте його з будь-якого браузера, що підтримує WebSocket . Точки перерви, профілер, livecoding тощо ... Це справді приголомшливо.

Встановіть його за допомогою:

npm install -g node-inspector

Потім запустіть:

node-debug app.js

14
Бажаний вузол-інспектор був активним. Профілюючий компонент повинен отримати любов.
Джонатан Дюман

13
На жаль для мене, node-inspector не працює з останніми версіями Node.js, і він не підтримує вхід до консолі браузера з v0.1. вузол-кодеїн був просто баггі. Отже, я написав власний модуль, щоб допомогти з налагодженням, дозволяючи скидати об’єкти та інше на консоль веб-браузера. Я подумав, що це може бути корисним комусь іншому: вузол-мавпа . Крім того, він працює як у Firefox, так і в Chrome.
Джастін Варкентін

7
Оскільки це був настільки дивовижний і популярний інструмент, то, напевно, той факт, що оригінальний автор визнав, що у них більше немає ресурсів для його підтримки, не буде проблемою, оскільки спільнота з відкритим кодом могла б забрати його?
PeterT

34
Зараз інспектор зараз активно підтримується StrongLoop і знову працює з останньою версією (0,3), так! Оголошення тут: blog.strongloop.com/…
balupton

21
"Починаючи з версії 6.3, Node.js надає налагоджувач на базі DevTools, який здебільшого знецінює інспектор вузлів, див. Наприклад, цей блог, щоб розпочати роботу. Вбудований налагоджувач розроблений безпосередньо командою V8 / Chromium функції (наприклад, довгі сліди стека / асинхронізації), які занадто складно реалізувати в Інспекторі вузлів. " - каже ревізор вузла repo
ThisClark

750

Налагодження

Профілювання

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

Купи

Полум'я

Простеження

Ведення журналів

Бібліотеки, що виводять інформацію про налагодження

Бібліотеки, що покращують інформацію про стеження стека

Бенчмаркінг

Інший

Спадщина

Вони використовуються для роботи, але більше не підтримуються або більше не застосовуються до сучасних версій вузлів.


8
Про Nodetime: для тих, хто не хоче надсилати свої дані на сервери nodetime, існує локальна "альтернатива" (вона все ще заснована на nodetime), lookмодуль, як зазначено в stackoverflow.com/questions/12864221/nodejs-memory- профілювання
realnice

Я не вважаю звіти про процесори з nodetime дуже корисними: 1. Я просто отримую дерево методів, не маючи часу на "само". 2. Здається, гілки дерев обрізані нижче певної кількості відсотків. Ці 2 дуже важко відмовитись, де процесор проводить більшу частину свого часу.
shacharz

npm install -g профілер скаржиться на відсутність 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 без необхідності затемнення?
балуптон

+1 Дуже добре працював для мене. Використання свіжої версії Eclipse 3.x, x64 на Mac OS X. Інструкції з установки також добре написані. Дякую.
любительська бариста

Також входить до Nodeclipse nodeclipse.orgвиправленими деякими помилками, пов’язаними з Node.js)
Пол Верест

Мій вхід на цю арену - це трепанс ( 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 (використовуючи DevTools Chrome)

Вузли, вбудовані в налагоджувач графічного інтерфейсу

Просто перенесіть прапор інспектора, і вам буде надана URL-адреса інспектору:

node --inspect server.js

Ви також можете перерватися на перший рядок, перейшовши --inspect-brkзамість цього.


2
Не знижувати кроки вище, а просто поділитися ... Я спробував створити обгортку, яка трохи міцніша, а також простіша в установці. Дивіться: github.com/jaridmargolin/inspect-process
Р. Марголін

1
@ JaridR.Margolin Nice. Я оновив відповідь, щоб використовувати це замість цього. Набагато простіше в налаштуванні і працює краще :)
gregers

2
Ця відповідь наразі знаходиться внизу, і це єдине, що насправді працювало на мене. Це гортає дивовижно!
ЗАГАД

3
У випадку, якщо це комусь допоможе, я викинув відео на пояснення цього процесу на youtu.be/rtZKUnks6jI .
RoccoB

2
Звідки ви взяли темну тему для інструментів для розробників хрому?
Пітер Мейерсон

93

Node.js версії 0.3.4+ має вбудовану підтримку налагодження.

node debug script.js

Посібник: http://nodejs.org/api/debugger.html


1
Чи є у вас посилання на документацію, як ним користуватися?
Фабіан Якобс

2
У мене немає документів. щойно оновлено до v0.3.5. поставити рядок "налагоджувач;" у вашому коді, який буде виконувати роль точки перелому. Він працює як ndb / gdb. після того, як ви зробите "node debug script.js" довідки. u побачить команду, яку вона підтримує. p = друк, l = список ... так що вам не потрібно вводити весь світ
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 надає подібний досвід налагодження, як ви, можливо, мали інші IDE, такі як VS, Eclipse тощо.

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


Це круто, але він має відставання. Ось чому я волію Sublime коли-небудь.
calbertts

3
але у піднесеного немає відладчика, і я думаю, що VS-код теж досить швидкий
Syed Faizan

1
У мене піднесена ліцензія з 5 років тому. Оскільки кілька місяців тому я навіть не встановлював Sublime Text, а лише vscode. У коробці є багато інструментів, які я сумую в Sublime (як інтегрований термінал ..).
elboletaire

завжди просить у мене конфігураційну папку, вона не спрацьовує
carkod

@carkod увімкніть перевагу проти коду, автоматично додайте перевагу та використовуйте термінал проти коду для запуску сценарію, ex node --inspect file-name.js
Vipul Dessai

57

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

Він працює в декількох ОС і має вбудовану налагодження Node.js (а також безліч інших речей] ( http://www.jetbrains.com/webstorm/features/index.html ).

Мої єдині "питання" / списки бажань є були :

  1. Здається, на Mac більше голодних ресурсів, ніж у Windows Це вже не здається проблемою у версії 6.
  2. Було б добре, якби у нього була підтримка Snippet (як, наприклад, у Sublime Text 2 - тобто введіть "fun" та натисніть "tab", щоб ввести функцію. Дивіться коментар @WickyNilliams нижче - За допомогою шаблонів Live ви також маєте підтримку фрагментів.

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. Якщо ви, як і я, використовуєте веб-штурм , то ось зручне керівництво по налагодженню звідти.

Складіть сліди

За замовчуванням ми не можемо простежити серію операцій через різні цикли циклу подій (галочки). Щоб обійти це, подивіться на longjohn (але не у виробництві!).

Витоки пам'яті

З Node.js ми можемо мати серверний процес, який, як очікується, буде тривалий час. Що робити, якщо ти думаєш, що це спричинило неприємні витоки? Використовуйте heapdump та Chrome DevTools, щоб порівняти деякі знімки та побачити, що змінюється.


Про деякі корисні статті ознайомтесь

Якщо ви хочете переглянути відео (відео), тоді

Який би шлях ви не вибрали, просто переконайтеся, що ви розумієте, як ви налагоджуєте

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

Боляче
дивитись на власну неприємність і знати,
що ти сам і ніхто інший цього не зробив

Софокл, Аякс


41

Тесей є проект Adobe дослідження , який дозволяє налагоджувати код Node.js в їх редактор Open Source Кронштейни . Він має деякі цікаві функції, такі як покриття коду в реальному часі, ретроактивна перевірка, асинхронне дерево викликів.

скріншот


це досить круто, досі не знаю, що таке Backtrace for tho
misaxi

Я зараз люблю Тесея, але у мене все ще є проблеми, коли мені потрібно встановити точку перерви і простежити. Наразі мені потрібно вбити свою програму, запустити вузол з --debug, простежити trhough, а потім запустити додаток з node-Theseus. Чи можна використовувати Тесей з точками перерви? Я спробував пошукати сторінку GitHub, StackOverflow та форуми, але поки не пощастило. Я щось пропускаю?
Євген

25

Node.js Інструменти для Visual Studio 2012 або 2013 включає відладчик. Огляд тут кажуть «Node.js інструментів для Visual Studio включає в себе повну підтримку налагодження вузлів додатків.». Будучи новим у Node.js, але маючи досвід роботи в .NET, я знайшов, що це додаток є прекрасним способом налагодження програм Node.js.


23

Код Visual Studio має дуже гарну підтримку налагодження Node.js. Він безкоштовний, з відкритим кодом та кросплатформним, працює на Linux, OS X та Windows.

Ви навіть можете налагоджувати завдання бурчання та глотання , якщо вам це потрібно ...


1
Починаючи з Visual Studio Code 8.0, підтримка налагодження для OSX та Linux отримала дійсно хороший результат.
bgse

Провівши цілий вечір, змусивши інспектор вузлів та strongloop функціонувати під windows (Visual Studio Community, понизитись до npm 2, встановити python, env змінні, використовувати cmd не babun / cygwin тощо тощо), а потім грати з цим протягом години , Я мушу сказати, що це найкращий варіант принаймні у windows та, можливо, загалом (якщо у вас немає веб-сторн)
dashambles

22

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

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

Візуальний відладчик з відкритими ресурсами.

Установка:

npm install iron-node -g;

Налагоджувати:

iron-node yourscript.js;



15

Використання версії Chrome 67.0.3396.62 (+)

  1. Запустити додаток із вузлом

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

  1. Переглядайте додаток у хромі, наприклад, "localhost: port"
  2. Відкрийте DevTools.
  3. Клацніть піктограму вузла поруч із значком чуйного пристрою.

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

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

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


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()





8

Почніть процес вузла з --inspect прапором.

node --inspect index.js

а потім відкрити chrome://inspectв хромі. Клацніть посилання "Відкрити спеціальний DevTools для вузла" або встановіть це хромоване розширення для легкого відкриття хромованих 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

Є багато можливостей ...

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


5

Існує новий проект з відкритим кодом Nodeclipse (як плагін Eclipse або Enide Studio ):

Nodeclipse став №1 в Топ-10 нових плагінів Eclipse за 2013 рік . Він використовує модифікований налагоджувач V8 (від Інструментів для розробників Google Chrome для 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 .



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і viola: налагодження у браузері.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.