Jak debugować aplikacje Node.js?


1578

Jak debugować aplikację serwera Node.js?

Obecnie używam głównie debugowania alertów za pomocą instrukcji drukowania takich jak to:

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

Musi być lepszy sposób na debugowanie. Wiem, że Google Chrome ma debugger wiersza polecenia. Czy ten debugger jest dostępny również dla Node.js?


3
Możesz użyć Locus do wstrzyknięcia z wiersza poleceń.
Ali Davut,

5
Jeśli chcesz debugować przy użyciu tradycyjnej metody IDE, użyj vscode użyj vscode youtube.com/watch?v=egBJ0cd0GLM
jw56578

4
Ten artykuł jest dla mnie bardzo interesujący i działa dobrze: debugowanie Node.js za pomocą Chrome DevTools . Mam nadzieję, że to pomoże :)
Timbergus

2
„alert debuggowanie” :)
The Red Pea

Pamiętaj, że musisz uruchomić nod z --inspect-brkINSTEAD OF, --inspectjeśli chcesz debugować rzeczywisty kod serwera podczas ładowania. Zobacz stackoverflow.com/questions/59596138
Jorge Orpinel

Odpowiedzi:


1261

węzeł-inspektor może uratować dzień! Używaj go z dowolnej przeglądarki obsługującej WebSocket . Punkty przerwania, profilowanie, kodowanie na żywo itp. To naprawdę niesamowite.

Zainstaluj z:

npm install -g node-inspector

Następnie uruchomić:

node-debug app.js

14
Życzący inspektor węzłów był aktywny. Komponent profilujący musi zyskać trochę miłości.
Jonathan Dumaine

13
Niestety dla mnie, node-inspector nie działa z najnowszymi wersjami Node.js i nie obsługuje logowania do konsoli przeglądarki od wersji 0.1. node-codein był po prostu błędny. Napisałem więc własny moduł, który pomaga w debugowaniu, pozwalając na zrzucanie obiektów i tym podobne do konsoli przeglądarki internetowej. Myślałem, że może się przydać komuś innemu: węzeł-małpa . Dodatkowo działa zarówno w przeglądarce Firefox, jak i Chrome.
Justin Warkentin,

7
Ponieważ było to tak pozornie niesamowite i popularne narzędzie, z pewnością fakt, że oryginalny autor przyznał, że nie mają już środków na jego utrzymanie, nie stanowiłby problemu, ponieważ społeczność open source mogłaby to odebrać?
PeterT

34
Teraz inspektor jest teraz aktywnie utrzymywany przez StrongLoop i znowu działa z najnowszą wersją (0.3) yay! Ogłoszenie tutaj: blog.strongloop.com/…
balupton

21
„Od wersji 6.3 Node.js zapewnia wbudowany debugger oparty na DevTools, który w większości nieaktualny Inspektora węzłów, patrz np. Ten post na blogu, aby rozpocząć. Wbudowany debugger jest opracowywany bezpośrednio przez zespół V8 / Chromium i zapewnia pewne zaawansowane cechy (np. ślady stosu długiego / asynchronicznego), które są zbyt trudne do zaimplementowania w Node Inspector. ” - mówi repozytorium inspektora węzłów
ThisClark

750

Debugowanie

Profilowy

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

Zrzuty

Flamegraphs

Rysunek kalkowy

Logowanie

Biblioteki wysyłające informacje debugujące

Biblioteki, które poprawiają informacje o śledzeniu stosu

Benchmarking

Inny

Dziedzictwo

Są używane do pracy, ale nie są już utrzymywane lub nie mają już zastosowania do nowoczesnych wersji węzłów.


8
O Nodetime: dla tych, którzy nie chcą wysyłać swoich danych do serwerów nodetime, istnieje lokalna „alternatywa” (nadal oparta na nodetime), lookmoduł, jak wskazano w stackoverflow.com/questions/12864221/nodejs-memory- profilowanie
naprawdęnice

Nie wydaje mi się, aby raporty procesora z nodetime były bardzo pomocne: 1. Po prostu otrzymuję drzewo metod, bez czasu „ja”. 2. Wygląda na to, że gałęzie drzewa są przycinane poniżej określonej liczby procentowej. Te 2 bardzo utrudniają zrozumienie, gdzie procesor spędza większość czasu.
shacharz

npm install -g profiler narzeka na brak pytona w Windows 7. Próbowałem ustawić python = C: \ Python34 \, ale to powoduje awarię.
Stepan Yakovenko

Jedynym profilerem działającym po wyjęciu z pudełka jest nodetime. Ale jego profilowanie śledzenia stosu procesora jest bezużyteczne (nie zawiera wystarczającej liczby szczegółów). Narzędzia Nodejs 4 msvc 2012 również mają profiler, ale zgłosiły również krytyczny nierozwiązany błąd ...
Stepan Yakovenko

Jedynym profilerem, który pracował dla mnie, był nprof+ v8.logfrom node --prof.
Dan Abramov,

253

V8 debugger wydany w ramach Google Developer Tools Chrome mogą być używane do debugowania skryptów node.js. Szczegółowe wyjaśnienie jak to działa można znaleźć w wiki node.js GitHub .


12
Jestem zainteresowany, po prezentacji w Google IO, którą zrobili Paul Irish i Pavel, czy można teraz debugować node.js bezpośrednio w Narzędziach Chrome dla programistów bez potrzeby zaćmienia?
balupton

+1 działało dla mnie bardzo dobrze. Używanie nowej wersji Eclipse 3.x, x64 w systemie Mac OS X. Instrukcje instalacji są również dobrze napisane. Dziękuję Ci.
barista amator

Dostępny jest również w Nodeclipse nodeclipse.org (z kilkoma naprawionymi błędami związanymi z Node.js)
Paul Verest

Moje wejście na tę arenę to trepanjs ( npmjs.com/package/trepanjs ). Ma wszystkie zalety debuggera węzła, ale lepiej odpowiada gdb. Ma także więcej funkcji i poleceń, takich jak podświetlanie składni, szersza pomoc online i inteligentniejsza ocena. Zobacz github.com/rocky/trepanjs/wiki/Cool-things, aby zobaczyć niektóre z jego ciekawych funkcji.
skalisty

1
Ta funkcja jest obecnie dostępna w wersjach nocnych. Sprawdź tutaj instrukcje:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
zeronone

191

Węzeł ma wbudowany debugger GUI od wersji 6.3 (przy użyciu DevTools Chrome)

Debuger wbudowanego interfejsu GUI

Po prostu przekaż flagę inspektora, a otrzymasz inspektora adres URL:

node --inspect server.js

Możesz także przełamać pierwszą linię, przechodząc --inspect-brkzamiast niej.


2
Nie pomijając powyższych kroków, ale po prostu udostępnić ... Próbowałem stworzyć opakowanie, które jest nieco bardziej wytrzymałe i łatwiejsze do zainstalowania. Zobacz: github.com/jaridmargolin/inspect-process
Jarid R. Margolin

1
@ JaridR.Margolin Nice. Zaktualizowałem odpowiedź, aby zamiast tego użyć. Dużo łatwiejsze do skonfigurowania i działa lepiej :)
Gregers

2
Ta odpowiedź jest obecnie na dole i jest to jedyna, która faktycznie dla mnie zadziałała. To niesamowite!
LOAS

3
Aby komukolwiek to pomogło, wyrzuciłem film wyjaśniający ten proces na youtu.be/rtZKUnks6jI .
RoccoB

2
Skąd masz ciemny motyw do narzędzi programistycznych Chrome?
Pieter Meiresone,

93

Node.js w wersji 0.3.4+ ma wbudowaną obsługę debugowania.

node debug script.js

Podręcznik: http://nodejs.org/api/debugger.html


1
Czy masz jakieś linki do dokumentacji, jak z niego korzystać?
Fabian Jakobs

2
Nie mam żadnych dokumentów. właśnie zaktualizowano do v0.3.5. wstaw wiersz „debugger;” w twoim kodzie, który będzie działał jako punkt przerwania. Działa jak ndb / gdb. po wykonaniu „node debug script.js” wpisz help. zobaczysz polecenie, które obsługuje. p = drukuj, l = lista ... więc nie musisz wpisywać pełnego świata
JulianW

2
Uwaga: w systemie Windows jest to „node.exe --debug myscript.js”, ale nadal nie działa.
Marc

6
Prawdopodobnie musisz zmienić --debugna debugbez myślników. Tak w końcu udało mi się to uruchomić. To mylące --debugi debugzrobić dwie różne rzeczy.
benekastah

Jak faktycznie uruchomić program? „r -> app is already running...”, gdy próbuję kontynuować i natrafiam na instrukcję, która próbuje uzyskać dane wejściowe, upuszcza mnie z powrotem po pytaniu debugowania, zamiast pozwalać mi wprowadzić dane wejściowe, które są wymagane.
Michael

70

Visual Studio Code będzie moim wyborem do debugowania. Bez kosztów instalowania jakichkolwiek narzędzi lubnpm installrzeczy. Wystarczy ustawić punkt początkowy aplikacji w pakiecie.json, a VSCode automatycznie utworzy plik konfiguracyjny wewnątrz twojego rozwiązania. JestopartynaElectronie, na którym zbudowane są edytory takie jak Atom.

Kod VS daje podobne możliwości debugowania, jakie można mieć w innych środowiskach IDE, takich jak VS, Eclipse itp.

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj


Jest fajnie, ale ma opóźnienie. Dlatego wolę Sublime kiedykolwiek.
calbertts

3
ale wzniosły nie ma debugera i myślę, że kod VS jest również dość szybki
Syed Faizan

1
Mam wzniosłą licencję od 5 lat temu. Od kilku miesięcy nawet nie instaluję Sublime Text, tylko vscode. Po wyjęciu z pudełka jest wiele narzędzi, za którymi tęsknię w Sublime (takich jak zintegrowany terminal ...).
elboletaire,

zawsze pytając mnie o folder konfiguracji, nie działa po wyjęciu z pudełka
carkod

@carkod włącz preferencje automatycznego dołączania vs kodu i użyj terminalu vs, aby uruchomić skrypt, ex węzeł --inspect file-name.js
Vipul Dessai

57

Ja osobiście korzystam z JetBrains WebStorm, ponieważ jest to jedyne znalezione przeze mnie IDE JavaScript, które jest idealne zarówno dla JavaScript jak i frontendu.

Działa na wielu systemach operacyjnych i ma wbudowane debugowanie Node.js (a także mnóstwo innych rzeczy] ( http://www.jetbrains.com/webstorm/features/index.html ).

Moje jedyne „problemy” / elementy z listy życzeń były :

  1. Wydaje się być bardziej zasobny w Maca niż Windows W wersji 6 nie wydaje się to już problemem.
  2. Byłoby miło, gdyby miał obsługę Snippet (podobnie jak w Sublime Text 2 - tj. Wpisz „fun” i dotknij „tab”, aby włączyć funkcję. Patrz komentarz @WickyNilliams poniżej - W przypadku szablonów na żywo masz również obsługę fragmentów.

10
webstorm ma obsługę fragmentów BTW ;-), chociaż są one znane jako „aktywne szablony” zamiast fragmentów.
WickyNilliams,

3
Jeśli chcesz tylko debugować aplikację node.js i masz już licencję Intellij IDEA, możesz po prostu zainstalować wtyczkę node.js bez konieczności kupowania licencji WebStorm. Konfigurowanie konfiguracji uruchamiania / debugowania jest bardzo łatwe po zainstalowaniu wtyczki.
Josh Liptzin

42

Wiele świetnych odpowiedzi tutaj, ale chciałbym dodać mój pogląd (w oparciu o ewolucję mojego podejścia)

Dzienniki debugowania

Spójrzmy prawdzie w oczy, wszyscy kochamy coś dobrego, console.log('Uh oh, if you reached here, you better run.')a czasem to działa świetnie, więc jeśli jesteś niechętny, aby odsunąć się od niego zbyt daleko, dodaj przynajmniej trochę blingów do dzienników za pomocą debugowania Visionmedia .

Interaktywne debugowanie

Przydatne, jak może być logowanie w konsoli, do profesjonalnego debugowania musisz zakasać rękawy i utknąć. Ustaw punkty przerwania, przejdź przez kod, sprawdzaj zakresy i zmienne, aby zobaczyć, co powoduje to dziwne zachowanie. Jak wspomnieli inni, inspektor węzłów to tak naprawdę kolana pszczół. Robi wszystko, co możesz zrobić dzięki wbudowanemu debuggerowi, ale używając tego znanego interfejsu Chrome DevTools. Jeśli, podobnie jak ja, używasz Webstorm , oto przydatny przewodnik do debugowania z tego miejsca.

Stosy śladów

Domyślnie nie możemy prześledzić szeregu operacji w różnych cyklach pętli zdarzeń (tyknięcia). Aby obejść ten problem, spójrz na longjohn (ale nie w produkcji!).

Wycieki pamięci

Dzięki Node.js możemy oczekiwać, że proces serwera pozostanie bezczynny przez długi czas. Co robisz, jeśli uważasz, że spowodowało to kilka nieprzyjemnych wycieków? Użyj heapdump i Chrome DevTools, aby porównać niektóre migawki i zobaczyć, co się zmienia.


Aby zapoznać się z przydatnymi artykułami, sprawdź

Jeśli masz ochotę obejrzeć film (y), to

Niezależnie od wybranej ścieżki, upewnij się, że rozumiesz, w jaki sposób debugujesz

wprowadź opis zdjęcia tutaj

Bolesne jest
patrzeć na własne kłopoty i wiedzieć,
że samemu i nikomu innemu się to nie udało

Sophocles, Ajax


41

Tezeusz jest projektem przez Adobe badań, które pozwala na debugowanie kodu node.js w ich edytor Open Source nawiasach . Ma kilka interesujących funkcji, takich jak pokrycie kodu w czasie rzeczywistym, kontrola wsteczna, asynchroniczne drzewo połączeń.

zrzut ekranu


to jest całkiem fajne, wciąż nie wiem, co to za Backtrace
misaxi

Obecnie uwielbiam Tezeusza, ale wciąż mam problemy, w których muszę ustalić punkt przerwania i prześledzić. Obecnie muszę zabić moją aplikację, uruchomić węzeł za pomocą --debug, śledzić trhough, a następnie uruchomić aplikację za pomocą node-Theseus. Czy można używać Tezeusza z punktami przerwania? Próbowałem przeszukiwać stronę GitHub, StackOverflow i fora, ale jak dotąd bez powodzenia. Czy coś brakuje?
Eugene

25

Narzędzia Node.js dla Visual Studio 2012 lub 2013 zawierają debugger. Przegląd tutaj stwierdza: „Narzędzia Node.js dla Visual Studio obejmują pełną obsługę debugowania aplikacji węzłów”. Będąc nowym użytkownikiem Node.js, ale mając doświadczenie w .NET, ten dodatek jest świetnym sposobem na debugowanie aplikacji Node.js.


23

Visual Studio Code ma naprawdę niezłą obsługę debugowania Node.js. Jest darmowy, open source i wieloplatformowy i działa w systemach Linux, OS X i Windows.

Możesz nawet debugować zadania chrząkania i przełykania , jeśli musisz ...


1
Począwszy od Visual Studio Code 8.0 obsługa debugowania w OSX i Linuxie stała się naprawdę dobra.
bgse,

Po spędzeniu całego wieczoru uruchomienie inspektora węzłów i strongloop pod Windows (Visual Studio Community, obniżenie wersji do npm 2, instalacja Pythona, zmiennych env, używanie cmd zamiast babun / cygwin itp.), A następnie granie z tym przez godzinę , Muszę powiedzieć, że jest to najlepsza opcja przynajmniej w systemie Windows i być może w ogóle (jeśli nie masz webstorn)
dashambles,

22

Napisałem inne podejście do debugowania kodu Node.js, który jest stabilny i niezwykle prosty. Jest dostępny na https://github.com/sa/iron-node .

Wpisz opis zdjęcia tutaj

Wieloplatformowy debugger wizualny typu open source.

Instalacja:

npm install iron-node -g;

Odpluskwić:

iron-node yourscript.js;



15

Korzystanie z wersji Chrome 67.0.3396.62 (+)

  1. Uruchom aplikację węzła

węzeł --inspect-brk = 0.0.0.0: 9229 server.js (nazwa pliku js serwera)

  1. Przeglądaj swoją aplikację w chrome, np. „Localhost: port”
  2. Otwórz DevTools.
  3. Kliknij ikonę węzła obok ikony urządzenia reagującego.

wprowadź opis zdjęcia tutaj

Pojawi się kolejne okno DevTools, które pojawi się specjalnie do debugowania aplikacji węzła.

wprowadź opis zdjęcia tutaj


13

Stworzyłem małe schludne narzędzie o nazwie pry.js, które może ci pomóc.

Umieść prostą instrukcję gdzieś w kodzie, uruchom skrypt normalnie, a węzeł zatrzyma bieżący wątek, dając ci dostęp do wszystkich zmiennych i funkcji. Przeglądaj / edytuj / usuwaj je do woli!

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

Rozpocznij proces węzła flagą --inspect .

node --inspect index.js

a następnie Otwórz chrome://inspectw chrome. Kliknij link „Otwórz dedykowane narzędzia DevTools dla węzła” lub zainstaluj to rozszerzenie chrome, aby łatwo otwierać chrome DevTools.

Aby uzyskać więcej informacji, zapoznaj się z tym linkiem


7

Jeśli potrzebujesz potężnej biblioteki rejestrowania dla Node.js, Tracer https://github.com/baryon/tracer jest lepszym wyborem.

Wysyła komunikaty dziennika ze znacznikiem czasu, nazwą pliku, nazwą metody, numerem linii, ścieżką lub stosem wywołań, obsługuje konsolę kolorów i obsługuje bazę danych, pliki i transport strumieniowy. Jestem autorem


7

Zakładając, że masz zainstalowany na komputerze inspektor węzłów (jeśli nie, wpisz „npm install -g node-inspector”), po prostu musisz uruchomić:

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

I wklej URI z wiersza poleceń do przeglądarki WebKit (Chrome / Safari).


1
inspektor węzła został już wspomniany; może usunąć tę odpowiedź?
Dan Dascalescu






4

Użyj tych poleceń

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect


3

Szybkim i brudnym sposobem debugowania małych skryptów Node.js za pomocą ulubionego debugera przeglądarki byłoby użycie Browserify . Pamiętaj, że to podejście nie działa z żadnymi aplikacjami, które wymagają natywnych bibliotek we / wy, ale jest wystarczające dla większości małych skryptów.

$ npm install -g browserify

Teraz przenieś wszystkie var x = requires('x')połączenia do requires.jspliku i uruchom:

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

(Minusem tutaj jest to, że albo musisz przenieść lub skomentować requires we wszystkich swoich plikach.)

Dołącz do bundle.jspliku HTML tak:

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

Teraz załaduj plik do przeglądarki i naciśnij F12i viola: debuguj w przeglądarce.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.