Node.js uygulamalarında nasıl hata ayıklayabilirim?


1578

Bir Node.js sunucu uygulamasında nasıl hata ayıklayabilirim?

Şu anda çoğunlukla bu gibi basılı ifadelerle uyarı hata ayıklama kullanıyorum :

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

Hata ayıklamanın daha iyi bir yolu olmalı. Google Chrome'un bir komut satırı hata ayıklayıcısı olduğunu biliyorum . Bu hata ayıklayıcı Node.js için de kullanılabilir mi?


3
Locus'u komut satırı enjeksiyonu için kullanabilirsiniz .
Ali Davut

5
Geleneksel IDE uygulamasıyla hata ayıklamak istiyorsanız vscode use vscode kullanın youtube.com/watch?v=egBJ0cd0GLM
jw56578

4
Bu makaleyi çok ilginç buldum ve benim için iyi çalışıyor: Node.js'yi Chrome DevTools ile hata ayıklama . Umarım yardımcı olur :)
Timbergus

2
"uyarı hata ayıklama" :)
Kırmızı Bezelye

Yükleme sırasında gerçek sunucu kodunda hata ayıklamak istiyorsanız , --inspect-brkINSTEAD OF ile nod çalıştırmanız gerektiğini unutmayın --inspect. Bkz. Stackoverflow.com/questions/59596138
Jorge Orpinel

Yanıtlar:


1261

Düğüm müfettişi günü kurtarabilirdi! WebSocket'i destekleyen herhangi bir tarayıcıdan kullanın . Kesme noktaları, profiler, livecoding, vb ... Gerçekten harika.

Şununla yükle:

npm install -g node-inspector

O zaman koş:

node-debug app.js

14
İstek düğümü müfettişi aktifti. Profil oluşturma bileşeninin biraz sevgiye ihtiyacı var.
Jonathan Dumaine

13
Ne yazık ki benim için, düğüm müfettişi Node.js'nin en son sürümleriyle çalışmaz ve v0.1'den beri tarayıcı konsolunda oturum açmayı desteklemez. düğüm-kodini sadece buggy oldu. Bu yüzden, hata ayıklamaya yardımcı olması için kendi modülümü yazdım, böylece web tarayıcısı konsoluna nesneler ve benzerlerini dökmenize izin verdim. Bunun başkası için yararlı olabileceğini düşündüm: düğüm-maymun . Ayrıca hem Firefox hem de Chrome'da çalışır.
Justin Warkentin

7
Bu görünüşte şaşırtıcı ve popüler bir araç olduğu için, orijinal yazarın açık kaynak topluluğunun onu alabileceği gibi, artık bunu sürdürecek kaynaklara sahip olmadığını itiraf ettiği gerçeği?
PeterT

34
Müfettiş şimdi StrongLoop tarafından aktif olarak sürdürülüyor ve en son sürümle (0.3) tekrar çalışıyor! Burada duyuru: blog.strongloop.com/…
balupton

21
"6.3 sürümünden bu yana, Node.js çoğunlukla Düğüm Denetçisini kullanımdan kaldırmış bir DevTols tabanlı hata ayıklayıcı sağlar, başlamak için bu blog yayınına bakın. Yerleşik hata ayıklayıcı doğrudan V8 / Chromium ekibi tarafından geliştirilir ve belirli gelişmiş Düğüm Denetçisinde uygulanması çok zor olan özellikler (ör. uzun / zaman uyumsuz yığın izleri). " - düğüm müfettişi repo diyor
ThisClark

750

Hata ayıklama

profil oluşturma

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

Heapdumps

Flamegraphs

İzleme

Kerestecilik

Hata ayıklama bilgisi veren kütüphaneler

Yığın izleme bilgilerini geliştiren kitaplıklar

Kıyaslama

Diğer

miras

Bunlar çalışmak için kullanılır, ancak artık modern düğüm sürümleri için korunmaz veya artık uygulanamaz.


8
Nodetime hakkında: verilerini nodetime sunucularına göndermek istemeyenler için look, stackoverflow.com/questions/12864221/nodejs-memory-
reallynice

Ben nodetime cpu raporları çok yararlı bulmuyorum: 1. Ben sadece bir 'kendini' zaman olmadan, bir yöntem ağacı almak. 2. Görünüşe göre ağaç dalları belli bir sayıya göre kesilmiş. Bu 2, cpu'nun zamanının çoğunu nerede geçirdiğini anlamayı çok zorlaştırıyor.
shacharz

npm install -g profiler Windows 7'de eksik python şikayet ediyor. python = C: \ Python34 \ ayarlamaya çalıştım, ama bu bir çökme veriyor.
Stepan Yakovenko

Kutunun dışında çalışan tek profil, nodetime. Ancak cpu profili oluşturma yığını izlemesi kullanılamaz (yeterli ayrıntı vermez). Nodejs araçları 4 msvc 2012 de profiler var, ama aynı zamanda kritik
düzeltilmemiş

Benim için çalışan tek profil oluşturucu nprof+ v8.logidi node --prof.
Dan Abramov

253

V8 Google bir parçası olarak yayımlanan ayıklayıcı Chrome Geliştirici Araçları ayıklama node.js komut için kullanılabilir. Bunun nasıl çalıştığına dair ayrıntılı bir açıklama Node.js GitHub wiki'sinde bulunabilir .


12
Google IO'daki Paul İrlanda ve Pavel'in yaptığı sunumdan sonra artık tutulmaya gerek kalmadan node.js'yi doğrudan Chrome Geliştirici Araçları'na ayıklamak mümkün mü?
balupton

+1 Benim için çok iyi çalıştı. Mac OS X'te yeni bir Eclipse 3.x, x64 sürümü kullanma. Yükleme yönergeleri de iyi yazılmıştır. Teşekkür ederim.
amatör barista

Ayrıca Nodeclipse nodeclipse.org (bazı Node.js ile ilgili hatalar düzeltildi) içinde geliyor
Paul Verest

Bu arenaya girdiğim trepanjs ( npmjs.com/package/trepanjs ). Düğüm hata ayıklayıcısının tüm iyiliğine sahiptir, ancak gdb'ye daha uygundur. Ayrıca sözdizimi vurgulama, daha kapsamlı çevrimiçi yardım ve daha akıllı değerlendirme gibi daha fazla özellik ve komut içerir. Bazı harika özellikleri için github.com/rocky/trepanjs/wiki/Cool-things adresine bakın .
kayalık

1
Bu özellik şu anda gece sürümlerinde kullanılabilir. Talimatlar için buraya bakın:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
zeronone

191

Düğümün 6.3 sürümünden itibaren kendi yerleşik GUI hata ayıklayıcısı var (Chrome'un DevTools'u kullanarak)

GUI hata ayıklayıcısının yerleşik düğümleri

Müfettiş bayrağını iletmeniz yeterlidir. Müfettişe bir URL gönderilir:

node --inspect server.js

Bunun --inspect-brkyerine ilk satırı da geçebilirsiniz .


2
Yukarıdaki adımları iskonto etmek için değil, sadece paylaşmak için ... Biraz daha sağlam ve kurulumu daha kolay olan bir ambalaj oluşturmaya çalıştım. Bakınız: github.com/jaridmargolin/inspect-process
Jarid R. Margolin

1
@ JaridR.Margolin Güzel. Bunun yerine cevabı güncelledim. Kurulumu çok daha kolay ve daha iyi çalışıyor :)
Gregers

2
Bu cevap şu anda en altta ve benim için gerçekten işe yarayan tek cevap bu. Bu harika saygısız!
LOAS

3
Herhangi birine yardımcı olması durumunda, youtu.be/rtZKUnks6jI adresinde bu işlemi açıklayan bir video attım .
RoccoB

2
Chrome geliştirici araçları için karanlık temayı nereden buldunuz?
Pieter Meiresone

93

Node.js sürüm 0.3.4+ yerleşik hata ayıklama desteğine sahiptir.

node debug script.js

Manuel: http://nodejs.org/api/debugger.html


1
Nasıl kullanılacağına dair belgelere bağlantılarınız var mı?
Fabian Jakobs

2
Hiç dokümanım yok. sadece v0.3.5 sürümüne güncellendi. bir satır "debugger" koy; kodunuzda kırılma noktası görevi görecektir. Ndb / gdb gibi çalışır. "düğüm debug script.js" yazdıktan sonra yardım yazın. u desteklediği komutu göreceksiniz. p = yazdır, l = liste ... bu yüzden tüm dünyayı yazmanıza gerek yok
JulianW

2
Not, Windows altında "node.exe - debug myscript.js" ama yine de çalışmıyor.
Marc

6
Muhtemelen değiştirmek zorunda --debugiçin debugtire olmadan. Sonunda işe başladım. Bu kafa karıştırıcı --debugve debugiki farklı şey yapıyor.
benekastah

Programın gerçekten çalışmasını nasıl sağlıyorsunuz? "r -> app is already running...", devam etmeye çalıştığımda ve girdi almaya çalışan bir deyime koştuğumda, gerekli girdiyi girmeme izin vermek yerine beni hata ayıklama istemine bırakıyor.
Michael

70

Visual Studio Code hata ayıklama için benim seçimim olacak. Herhangi bir alet veyanpm installmalzemeyüklemeye gerek yok. Sadece uygulamanızın başlangıç ​​noktasını package.json içinde ayarlayın ve VSCode otomatik olarak çözümünüzün içinde bir yapılandırma dosyası oluşturacaktır. Atom gibi editörlerin üzerineinşa edildiğiElektronüzerine inşa edilmiştir.

VS Kodu, VS, Eclipse vb.Gibi diğer IDE'lerde sahip olabileceğiniz benzer hata ayıklama deneyimini sunar.

resim açıklamasını buraya girin resim açıklamasını buraya girin


Havalı ama gecikti. Bu yüzden Sublime'ı hiç tercih ediyorum.
calbertts

3
ama yüce bir hata ayıklayıcı yok ve VS kodu da oldukça hızlı olduğunu düşünüyorum
Syed Faizan

1
5 yıldan beri yüce bir lisansım var. Birkaç ay önce Sublime Text bile kurmuyorum, sadece vscode. Kutunun dışında Sublime'de özlediğim birçok araç var (entegre terminal gibi ..).
elboletaire

her zaman bir yapılandırma klasörü soruyor, kutunun dışında çalışmıyor
carkod

@carkod vs kod otomatik ekleme tercihini etkinleştirin ve komut dosyanızı başlatmak için vs kod terminalini kullanın, eski düğüm --inspect file-name.js
Vipul Dessai

57

Şahsen JetBrains WebStorm'u hem ön uç hem de arka uç JavaScript için harika bulduğum tek JavaScript IDE olduğu için kullanıyorum.

Birden fazla işletim sisteminde çalışır ve yerleşik Node.js hata ayıklama özelliğine sahiptir (ayrıca bir sürü başka şey de vardır) ( http://www.jetbrains.com/webstorm/features/index.html ).

Tek 'sorunlar' / istek listesi öğelerim Hangi vardı :

  1. Mac'te Windows'tan daha çok kaynak aç görünüyor Artık sürüm 6'da bir sorun gibi görünmüyor.
  2. Snippet desteği olsaydı iyi olurdu ( Sublime Text 2'deki gibi) - yani 'fun' yazın ve bir fonksiyon koymak için 'tab' düğmesine dokunun. Aşağıdaki @WickyNilliams yorumuna bakın - Canlı Şablonlar ile snippet desteğine de sahipsiniz.

10
webstorm, snippet'i BTW ;-) destekliyor ancak snippet'ler yerine "Canlı Şablonlar" olarak biliniyor.
WickyNilliams

3
Bir node.js uygulamasında hata ayıklamak ve zaten bir Intellij IDEA lisansına sahip olmak istiyorsanız, node.js eklentisini WebStorm lisansını satın almak zorunda kalmadan yükleyebilirsiniz. Eklenti kurulduktan sonra bir çalıştırma / hata ayıklama yapılandırması ayarlamak çok kolaydır.
Josh Liptzin

42

Burada çok sayıda harika yanıt var, ancak görüşümü eklemek istiyorum (yaklaşımımın nasıl geliştiğine bağlı olarak)

Hata Ayıklama Günlükleri

Kabul edelim, hepimiz bir iyiyi seviyoruz console.log('Uh oh, if you reached here, you better run.')ve bazen de harika çalışıyor, bu yüzden ondan çok uzaklaşmaktan çekiniyorsanız, en azından Visionmedia'nın hata ayıklamasıyla günlüklerinize biraz bling ekleyin .

Etkileşimli Hata Ayıklama

Konsol günlüğü olabildiğince kullanışlı, profesyonel olarak hata ayıklamak için kollarınızı açmanız ve sıkışmanız gerekir. Bu garip davranışa neyin neden olduğunu görmek için kesme noktalarını ayarlayın, kodunuzu adımlayın, kapsamları ve değişkenleri inceleyin. Diğerlerinin de belirttiği gibi, düğüm müfettişi gerçekten arı dizidir. Yerleşik hata ayıklayıcı ile yapabileceğiniz her şeyi yapar, ancak bu tanıdık Chrome DevTools arayüzünü kullanarak. Benim gibi Webstorm kullanıyorsanız , o zaman burada hata ayıklama için kullanışlı bir kılavuz.

Yığın İzleri

Varsayılan olarak, olay döngüsünün farklı döngüleri (keneler) boyunca bir dizi işlemi izleyemeyiz. Bunu aşmak için longjohn'a bir göz atın (ama üretimde değil!).

Bellek Sızıntıları

Node.js ile önemli bir süre devam etmesi beklenen bir sunucu işlemimiz olabilir. Bazı kötü sızıntılara neden olduğunu düşünüyorsanız ne yaparsınız? Kullanım heapDump ve Chrome Geliştirme Araçları bazı anlık karşılaştırmak ve değişen neler olduğunu görmek için.


Bazı yararlı makaleler için göz atın

Bir video izlemek istiyorsanız

Hangi yolu seçerseniz seçin, nasıl hata ayıkladığınızı anladığınızdan emin olun

resim açıklamasını buraya girin


Kendi sıkıntılarına bakmak ve
kendin ve başka hiç kimsenin bunu yapmadığını bilmek acı verici bir şeydir

Sofokles, Ajax


41

Theseus , Adobe araştırması tarafından Node.js kodunuzda Açık Kaynak düzenleyici Parantezlerinde hata ayıklamanıza izin veren bir projedir . Gerçek zamanlı kod kapsamı, geriye dönük inceleme, asenkron çağrı ağacı gibi bazı ilginç özelliklere sahiptir.

ekran görüntüsü


Bu çok güzel, hala tho için Backtrace ne olduğunu bilmiyorum
misaxi

Şu anda Theseus'u seviyorum, ancak hala bir kesme noktası ve iz bırakmam gereken bazı problemlerim var. Şu anda uygulamamı öldürmek, düğümü --debug ile başlatmak, gerçeği izlemek ve ardından uygulamayı düğüm-theseus ile başlatmak zorundayım. Theseus'u kesme noktalarıyla kullanmak mümkün müdür? GitHub sayfası, StackOverflow ve forumlarda arama yapmayı denedim, ancak şimdiye kadar şans yok. Bir şey mi kaçırıyorum?
Eugene

25

Visual Studio 2012 veya 2013 için Node.js Araçları bir hata ayıklayıcı içerir. Özet burada "Visual Studio düğüm uygulamaları ayıklama için tam destek içerir için node.js Araçlar." Belirtmektedir. Node.js için yeni olmak, ancak .NET'te bir arka plana sahip olmak, bu eklentiyi Node.js uygulamalarında hata ayıklamak için harika bir yol olarak buldum.


23

Visual Studio Code gerçekten güzel Node.js hata ayıklama desteğine sahiptir. Ücretsiz, açık kaynak ve çapraz platformdur ve Linux, OS X ve Windows üzerinde çalışır.

Gerekirse , grunt ve gulp görevlerinde hata ayıklayabilirsiniz ...


1
Visual Studio Code 8.0'dan başlayarak OSX ve Linux için hata ayıklama desteği gerçekten iyi oldu.
bgse

Bir akşam geçirdikten sonra düğüm müfettişi ve pencereler altında çalışmak için güçlü döngü (Visual Studio Community, npm 2'ye düşürme, python, env değişkenleri yükleme, cmd babun / cygwin vb. Kullanma) vb. , Bu en azından pencerelerde ve muhtemelen genel olarak en iyi seçenek olduğunu söylemek gerekir (webstorn yoksa)
dashambles

22

Kararlı ve son derece basit Node.js kodu hata ayıklamak için farklı bir yaklaşım yazdım. O mevcuttur https://github.com/sa/iron-node .

Resim açıklamasını buraya girin

Açık kaynaklı bir platformlar arası görsel hata ayıklayıcı.

Kurulum:

npm install iron-node -g;

Hata ayıklama:

iron-node yourscript.js;



15

Chrome Sürüm 67.0.3396.62'yi Kullanma (+)

  1. Düğüm uygulamasını çalıştır

düğüm --inspect-brk = 0.0.0.0: 9229 server.js (sunucu js dosya adı)

  1. Uygulamanızı chrome'da tarayın, örneğin "localhost: port"
  2. DevTools'u açın.
  3. Duyarlı cihaz simgesinin yanındaki düğüm simgesini tıklayın.

resim açıklamasını buraya girin

Düğüm uygulamasında hata ayıklamak için özel olarak açılacak başka bir DevTools penceresi olacak.

resim açıklamasını buraya girin


13

Size yardımcı olabilecek pry.js adlı küçük bir araç oluşturdum .

Kodunuzda bir yere basit bir ifade koyun, betiğinizi normal şekilde çalıştırın, düğüm tüm iş parçacığı ve işlevlerinize erişmenizi sağlayan geçerli iş parçacığını durdurur. İstediğiniz zaman görüntüleyin / düzenleyin / silin!

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

Düğüm işleminize --inspect flag ile başlayın .

node --inspect index.js

ve ardından kromda aç chrome://inspect. "DevTools için özel DevTools'u Aç" bağlantısını tıklayın veya krom DevTools'u kolayca açmak için bu krom uzantısını yükleyin .

Daha fazla bilgi için bu bağlantıya bakın


7

Node.js için güçlü bir günlük kütüphanesine ihtiyacınız varsa Tracer https://github.com/baryon/tracer daha iyi bir seçimdir.

Bir zaman damgası, dosya adı, yöntem adı, satır numarası, yol veya çağrı yığını, destek renk konsolu ve destek veritabanı, dosya, akış aktarımı ile günlük iletilerini kolayca gönderir. Ben yazarım.


7

Bilgisayarınızda düğüm denetçisinin yüklü olduğunu varsayarsak (eğer değilse, sadece 'npm install -g düğüm denetçisi' yazın):

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

Ve URI'yi komut satırından bir WebKit (Chrome / Safari) tarayıcısına yapıştırın.


1
düğüm müfettişinden daha önce bahsedilmişti; belki bu cevabı sil?
Dan Dascalescu





4

NetBeans IDE node.js beri destekleyen etti sürümü 8.1 :

<...>

Yeni Özelliklerin Önemli Özellikleri

Node.js Uygulama Geliştirme

  • Yeni Node.js proje sihirbazı
  • Yeni Node.js Express sihirbazı
  • Geliştirilmiş JavaScript Düzenleyici
  • Node.js uygulamalarını çalıştırmak için yeni destek
  • Node.js uygulamalarında hata ayıklama için yeni destek.

<...>

Ek referanslar:

  1. NetBeans Wiki / Yeni ve BilinmeyenNB81 .
  2. NetBeans IDE, Geertjan-Oracle Node.js Express Uygulaması .

4

Bu komutları kullanın

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


3

En sevdiğiniz tarayıcı hata ayıklayıcı ile küçük Node.js komut dosyalarında hata ayıklamanın hızlı ve kirli bir yolu browserify kullanmak olacaktır . Bu yaklaşımın yerel G / Ç kütüphaneleri gerektiren uygulamalarla çalışmadığını, ancak çoğu küçük komut dosyası için yeterince iyi olduğunu unutmayın.

$ npm install -g browserify

Şimdi tüm var x = requires('x')çağrılarınızı bir requires.jsdosyaya taşıyın ve çalıştırın:

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

(Buradaki dezavantaj requires, tüm dosyalarınızda taşınmanız veya yorum yapmanız gerektiğidir .)

bundle.jsHTML dosyasına şu şekilde ekleyin :

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

Şimdi dosyayı tarayıcınıza yükleyin F12ve şuna basın ve viola: debug tarayıcıda.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.