Bagaimana cara men-debug aplikasi Node.js?

1578

Bagaimana cara men-debug aplikasi server Node.js?

Saat ini saya lebih banyak menggunakan debugging lansiran dengan pernyataan cetak seperti ini:

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

Pasti ada cara yang lebih baik untuk melakukan debug. Saya tahu bahwa Google Chrome memiliki debugger baris perintah. Apakah debugger ini juga tersedia untuk Node.js?

Fabian Jakobs
sumber
3
Anda dapat menggunakan Locus untuk injeksi baris perintah.
Ali Davut
5
Jika Anda ingin melakukan debug dengan pendekatan IDE tradisional, gunakan vscode use vscode youtube.com/watch?v=egBJ0cd0GLM
jw56578
4
Saya telah menemukan artikel ini sangat menarik, dan itu berfungsi baik bagi saya: Debugging Node.js dengan Chrome DevTools . Semoga ini membantu :)
Timbergus
2
"alert debugging" :)
The Red Pea
Perlu diingat bahwa Anda perlu menjalankan anggukan dengan --inspect-brkBUKAN DARI --inspectjika Anda ingin men-debug kode server yang sebenarnya pada waktu buka. Lihat stackoverflow.com/questions/59596138
Jorge Orpinel

Jawaban:

1261

simpul-inspektur bisa menyelamatkan hari! Gunakan dari browser yang mendukung WebSocket . Breakpoints, profiler, livecoding, dll ... Sangat mengagumkan.

Instal dengan:

npm install -g node-inspector

Lalu lari:

node-debug app.js
daralthus
sumber
14
Wish node-inspector aktif. Komponen profil perlu mendapatkan cinta.
Jonathan Dumaine
13
Sayangnya bagi saya, node-inspector tidak berfungsi dengan versi terbaru Node.js dan belum mendukung proses masuk ke konsol browser sejak v0.1. node-codein hanya buggy. Jadi, saya menulis modul saya sendiri untuk membantu debugging dengan memungkinkan Anda untuk membuang objek dan semacamnya ke konsol browser web Anda. Saya pikir itu mungkin berguna untuk orang lain: simpul-monyet . Plus itu berfungsi di Firefox DAN Chrome.
Justin Warkentin
7
Karena ini adalah alat yang tampaknya luar biasa dan populer, tentunya fakta bahwa penulis asli telah mengakui bahwa mereka tidak lagi memiliki sumber daya untuk mempertahankannya tidak akan menjadi masalah karena komunitas open source dapat mengambilnya?
PeterT
34
Sekarang inspektur sekarang secara aktif dikelola oleh StrongLoop dan sedang bekerja lagi dengan versi terbaru (0.3) yay! Pengumuman di sini: blog.strongloop.com/...
balupton
21
"Sejak versi 6.3, Node.js menyediakan debugger berbasis-buit-in yang sebagian besar mencela Node Inspektur, lihat misalnya posting blog ini untuk memulai. Debugger bawaan dikembangkan langsung oleh tim V8 / Chromium dan menyediakan beberapa tingkat lanjut fitur (mis. jejak tumpukan panjang / async) yang terlalu sulit untuk diterapkan di Node Inspector. " - kata repo node inspector
ThisClark
750

Debugging

Pembuatan profil

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

Heapdumps

Flamegraf

Menelusuri

Penebangan

Perpustakaan yang menghasilkan informasi debug

Perpustakaan yang meningkatkan informasi jejak tumpukan

Benchmarking

Lain

Warisan

Ini digunakan untuk bekerja tetapi tidak lagi dipertahankan atau tidak lagi berlaku untuk versi node modern.

balupton
sumber
8
Tentang Nodetime: bagi mereka yang tidak ingin mengirim data mereka ke server nodetime ada "alternatif" lokal (masih didasarkan pada nodetime), lookmodul, sebagaimana ditunjukkan dalam stackoverflow.com/questions/12864221/nodejs-memory- profiling
reallynice
Saya tidak menemukan laporan cpu dari nodetime sangat membantu: 1. Saya hanya mendapatkan pohon metode, tanpa waktu 'mandiri'. 2. Sepertinya cabang-cabang pohon dipangkas di bawah sejumlah persentase tertentu. 2 itu membuatnya sangat sulit untuk memahami di mana cpu menghabiskan sebagian besar waktunya.
shacharz
npm install -g profiler mengeluh tentang hilangnya python di windows 7. Saya mencoba mengatur python = C: \ Python34 \, tapi ini membuat crash.
Stepan Yakovenko
Satu-satunya profiler yang bekerja di luar kotak adalah nodetime. Tapi stacktrace profiling cpu-nya tidak bisa digunakan (tidak memberikan detail yang cukup). Alat Nodejs 4 msvc 2012 juga memiliki profiler, tetapi juga telah melaporkan bug yang belum diperbaiki kritis ...
Stepan Yakovenko
Satu-satunya profiler yang berfungsi untuk saya adalah dari nprof+ . v8.lognode --prof
Dan Abramov
253

The V8 debugger dirilis sebagai bagian dari Google Developer Tools Chrome dapat digunakan untuk debug Node.js script. Penjelasan terperinci tentang cara kerjanya dapat ditemukan di wiki Nit.js GitHub .

Fabian Jakobs
sumber
12
Saya tertarik, setelah presentasi di Google IO yang dilakukan oleh Paul Irish dan Pavel sekarang apakah mungkin untuk men-debug node.js langsung ke Alat Pengembang Chrome tanpa perlu gerhana?
balupton
+1 Bekerja sangat baik untuk saya. Menggunakan Eclipse 3.x, versi x64 pada Mac OS X. Instruksi pemasangan juga ditulis dengan baik. Terima kasih.
barista amatir
Juga hadir dalam Nodeclipse nodeclipse.org (dengan beberapa bug terkait Node.js diperbaiki)
Paul Verest
Entri saya ke arena ini adalah trepanjs ( npmjs.com/package/trepanjs ). Ia memiliki semua kebaikan dari debugger simpul, tetapi lebih sesuai dengan gdb. Ini juga memiliki lebih banyak fitur dan perintah seperti penyorotan sintaksis, bantuan online yang lebih luas, dan evaluasi yang lebih cerdas. Lihat github.com/rocky/trepanjs/wiki/Cool-things untuk beberapa fitur kerennya.
berbatu
1
Fitur saat ini tersedia dalam versi malam. Lihat petunjuk di sini:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
zeronone
191

Node memiliki debugger GUI bawaannya sendiri pada versi 6.3 (menggunakan DevTools Chrome)

Node dibangun dalam GUI debugger

Cukup lewati bendera inspektur dan Anda akan diberikan URL ke inspektur:

node --inspect server.js

Anda juga dapat mematahkan pada baris pertama --inspect-brksebagai gantinya.

Alister
sumber
2
Bukan untuk mengabaikan langkah-langkah di atas, tetapi hanya untuk berbagi ... Saya mencoba membuat pembungkus yang sedikit lebih kuat, serta lebih mudah untuk menginstal. Lihat: github.com/jaridmargolin/inspect-process
Jarid R. Margolin
1
@ JaridR.Margolin Bagus. Saya memperbarui jawaban untuk menggunakannya sebagai gantinya. Jauh lebih mudah untuk mengatur dan bekerja lebih baik :)
gregers
2
Jawaban ini saat ini di bagian bawah dan satu-satunya yang benar-benar bekerja untuk saya. Ini benar-benar hebat!
LOAS
3
Jika itu membantu siapa pun, saya membuat video yang menjelaskan proses ini di youtu.be/rtZKUnks6jI .
RoccoB
2
Di mana Anda mendapatkan tema gelap untuk alat pengembang krom?
Pieter Meiresone
93

Node.js versi 0.3.4+ memiliki dukungan debugging bawaan.

node debug script.js

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

JulianW
sumber
1
Apakah Anda memiliki tautan ke dokumentasi tentang cara menggunakannya?
Fabian Jakobs
2
Saya tidak punya dokumen. baru saja diperbarui ke v0.3.5. beri garis "debugger;" dalam kode Anda yang akan bertindak sebagai break point. Ini bekerja seperti ndb / gdb. setelah Anda melakukan "ketik debug script.js" ketik bantuan. Anda akan melihat perintah yang didukungnya. p = cetak, l = daftar ... sehingga Anda tidak perlu mengetikkan seluruh dunia
JulianW
2
Catatan, di bawah windows itu "node.exe --debug myscript.js" tetapi masih tidak berfungsi.
Marc
6
Anda mungkin harus mengubah --debugke debugtanpa strip. Begitulah akhirnya saya berhasil. Ini membingungkan itu --debugdan debugmelakukan dua hal yang berbeda.
benekastah
Bagaimana Anda menjalankan program agar benar-benar berjalan? "r -> app is already running...", ketika saya mencoba untuk melanjutkan dan saya menemukan sebuah pernyataan yang mencoba untuk mendapatkan input, itu menjatuhkan saya kembali pada prompt debug bukannya membiarkan saya memasukkan input yang diperlukan.
Michael
70

Visual Studio Code akan menjadi pilihan saya untuk debugging. Tidak ada overhead menginstal alat ataunpm installbarangapa pun. Cukup setel titik awal aplikasi Anda di package.json dan VSCode akan secara otomatis membuat file konfigurasi di dalam solusi Anda. Itu dibangun di atasElectron, tempat editor seperti Atom dibangun.

VS Code memberikan pengalaman debugging yang sama seperti yang mungkin Anda miliki di IDE lain seperti VS, Eclipse, dll.

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Shreyas
sumber
Itu keren tapi ada lag. Itu sebabnya saya lebih suka Sublime.
Calbertts
3
tetapi luhur tidak memiliki debugger, dan saya pikir kode VS juga cukup cepat
Syed Faizan
1
Saya sudah memiliki lisensi luhur sejak 5 tahun yang lalu. Sejak beberapa bulan yang lalu saya bahkan tidak menginstal Sublime Text, hanya vscode. Out of the box memiliki banyak alat yang saya lewatkan di Sublime (seperti terminal terintegrasi ..).
elboletaire
selalu meminta saya untuk folder konfigurasi, itu tidak berfungsi di luar kotak
carkod
@codod mengaktifkan vs kode preferensi lampirkan otomatis dan menggunakan terminal vs kode untuk memulai skrip Anda, ex node --inspect file-name.js
Vipul Dessai
57

Saya pribadi menggunakan JetBrains WebStorm karena itu adalah satu-satunya IDE JavaScript yang saya temukan yang bagus untuk JavaScript frontend dan backend.

Ia bekerja pada banyak OS dan memiliki debugging Node.js bawaan (serta banyak hal lainnya) ( http://www.jetbrains.com/webstorm/features/index.html ).

Satu-satunya 'masalah' / item wishlist saya adalah adalah :

  1. Tampaknya lebih banyak sumber daya lapar di Mac daripada Windows Tampaknya tidak lagi menjadi masalah di versi 6.
  2. Akan lebih baik jika memiliki dukungan Snippet (seperti yang ada pada Sublime Text 2 - yaitu ketik 'fun' dan ketuk 'tab' untuk memasukkan fungsi. Lihat komentar @WickyNilliams di bawah ini - Dengan Template Langsung Anda juga memiliki dukungan cuplikan.
isNaN1247
sumber
10
webstorm memang memiliki dukungan potongan BTW ;-) meskipun mereka dikenal sebagai "Template Langsung" dan bukan cuplikan.
WickyNilliams
3
Jika Anda hanya ingin men-debug aplikasi node.js dan sudah memiliki lisensi Intellij IDEA, Anda cukup menginstal plugin node.js tanpa harus membeli lisensi WebStorm. Menyiapkan konfigurasi run / debug sangat mudah setelah plugin diinstal.
Josh Liptzin
42

Banyak jawaban bagus di sini, tetapi saya ingin menambahkan pandangan saya (berdasarkan bagaimana pendekatan saya berkembang)

Debug Log

Mari kita hadapi itu, kita semua suka yang baik console.log('Uh oh, if you reached here, you better run.')dan kadang-kadang itu bekerja dengan baik, jadi jika Anda segan untuk pindah terlalu jauh darinya setidaknya tambahkan beberapa bling ke log Anda dengan debug Visionmedia .

Debugging Interaktif

Berguna seperti pembuatan konsol, untuk melakukan debug secara profesional Anda perlu menyingsingkan lengan baju Anda dan terjebak. Tetapkan breakpoints, selesaikan kode Anda, periksa lingkup dan variabel untuk melihat apa yang menyebabkan perilaku aneh itu. Seperti yang telah disebutkan orang lain, simpul-inspektur sebenarnya adalah lebah-lutut. Itu melakukan semua yang dapat Anda lakukan dengan debugger bawaan, tetapi menggunakan antarmuka Chrome DevTools yang akrab. Jika, seperti saya, Anda menggunakan Webstorm , maka di sini ada panduan praktis untuk melakukan debug dari sana.

Jejak Tumpukan

Secara default, kami tidak dapat melacak serangkaian operasi di berbagai siklus loop acara (kutu). Untuk menyiasatinya, lihat longjohn (tetapi tidak dalam produksi!).

Kebocoran Memori

Dengan Node.js kita dapat memiliki proses server yang diharapkan tetap terjaga untuk waktu yang cukup lama. Apa yang Anda lakukan jika Anda pikir itu telah menimbulkan beberapa kebocoran jahat? Gunakan heapdump dan Chrome DevTools untuk membandingkan beberapa foto dan melihat apa yang berubah.


Untuk beberapa artikel bermanfaat, periksa

Jika Anda merasa ingin menonton video, maka

Apa pun jalur yang Anda pilih, pastikan Anda memahami cara Anda melakukan debug

masukkan deskripsi gambar di sini

Merupakan hal yang menyakitkan
Untuk melihat masalah Anda sendiri dan mengetahui
bahwa Anda sendiri dan tidak ada orang lain yang berhasil

Sophocles, Ajax

Philip O'Brien
sumber
41

Theseus adalah proyek penelitian Adobe yang memungkinkan Anda men-debug kode Node.js Anda dalam kurung Editor Open Source mereka . Ini memiliki beberapa fitur menarik seperti jangkauan kode waktu-nyata, inspeksi retroaktif, pohon panggilan asinkron.

tangkapan layar

Sindre Sorhus
sumber
ini cukup keren, masih tidak tahu apa Backtrace untuk tho
misaxi
Saya saat ini mencintai Theseus, tetapi saya masih memiliki beberapa masalah di mana saya perlu menetapkan breakpoint dan menelusuri. Saat ini saya harus mematikan aplikasi saya, memulai simpul dengan --debug, melacak trhough dan kemudian memulai aplikasi dengan node-theseus. Apakah mungkin menggunakan Theseus dengan breakpoints? Saya sudah mencoba mencari di sekitar halaman GitHub, StackOverflow dan forum, tetapi sejauh ini tidak berhasil. Apakah saya melewatkan sesuatu?
Eugene
25

Alat Node.js untuk Visual Studio 2012 atau 2013 termasuk debugger. Tinjauan umum di sini menyatakan "Alat Node.js untuk Visual Studio termasuk dukungan lengkap untuk debugging aplikasi simpul.". Menjadi baru untuk Node.js, tetapi memiliki latar belakang di. NET, saya telah menemukan ini menambahkan menjadi cara yang bagus untuk men-debug aplikasi Node.js.

John81
sumber
23

Visual Studio Code memiliki dukungan debug Node.js yang sangat bagus. Ini gratis, open source dan lintas platform dan berjalan di Linux, OS X dan Windows.

Anda bahkan dapat men-debug tugas kasar dan menelan , jika Anda perlu ...

hans
sumber
1
Mulai dari Visual Studio Code 8.0 dukungan debugging untuk OSX dan Linux menjadi sangat bagus.
bgse
Setelah menghabiskan sepanjang malam mendapatkan node-inspector dan strongloop berfungsi di bawah windows (Visual Studio Community, downgrade ke npm 2, menginstal python, variabel env, gunakan cmd bukan babun / cygwin dll.) Dan kemudian bermain dengan ini selama satu jam , Saya harus mengatakan ini adalah pilihan terbaik setidaknya di windows dan mungkin secara umum (jika Anda tidak memiliki webstorn)
dashambles
22

Saya menulis pendekatan berbeda untuk men-debug kode Node.js yang stabil dan sangat sederhana. Ini tersedia di https://github.com/sa/iron-node .

Masukkan deskripsi gambar di sini

Debugger visual lintas-platform opensource.

Instalasi:

npm install iron-node -g;

Debug:

iron-node yourscript.js;

Stephan Ahlf
sumber
15

Jika Anda menggunakan Atom IDE , Anda dapat menginstal node-debuggerpaket.

Uchiha Itachi
sumber
15

Menggunakan Chrome Versi 67.0.3396.62 (+)

  1. Jalankan aplikasi simpul

node --inspect-brk = 0.0.0.0: 9229 server.js (nama file server js)

  1. Jelajahi aplikasi Anda dalam chrome misalnya "localhost: port"
  2. Buka DevTools.
  3. Klik ikon simpul di sebelah ikon perangkat responsif.

masukkan deskripsi gambar di sini

Akan ada jendela DevTools lain yang akan muncul secara khusus untuk debugging aplikasi simpul.

masukkan deskripsi gambar di sini

babidi
sumber
13

Saya membuat alat kecil yang rapi bernama pry.js yang dapat membantu Anda.

Letakkan pernyataan sederhana di suatu tempat dalam kode Anda, jalankan skrip Anda secara normal dan simpul akan menghentikan utas saat ini yang memberi Anda akses ke semua variabel dan fungsi Anda. Lihat / edit / hapus sesuka mereka!

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
sumber
11

Ada klien debugger baris perintah bawaan di dalam Node.js. Cloud 9 IDE juga memiliki debugger (visual) yang cukup bagus .

yojimbo87
sumber
Cloud 9 adalah cara yang tepat bagi saya, terutama memberikan kebebasan pilihan kode di mana saja tanpa membawa laptop saya.
Teoman shipahi
8

Mulai proses simpul Anda dengan flag --inspect .

node --inspect index.js

dan kemudian Buka chrome://inspectdi chrome. Klik tautan "Buka DevTools khusus untuk Node" atau instal ini ekstensi chrome untuk membuka DevTools chrome dengan mudah.

Untuk info lebih lanjut lihat tautan ini

Rahul Kumar
sumber
7

Jika Anda membutuhkan pustaka logging yang tangguh untuk Node.js, Tracer https://github.com/baryon/tracer adalah pilihan yang lebih baik.

Ini output pesan log dengan cap waktu, nama file, nama metode, nomor baris, path atau panggilan stack, konsol warna dukungan, dan dukungan database, file, stream transport dengan mudah. Akulah penulisnya.

Baryon Lee
sumber
7

Dengan anggapan Anda telah menginstal node-inspector di komputer Anda (jika tidak, cukup ketik 'npm install -g node-inspector') Anda hanya perlu menjalankan:

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

Dan rekatkan URI dari baris perintah ke browser WebKit (Chrome / Safari).

Shaheen Ghiassy
sumber
1
simpul-inspektur telah disebutkan; mungkin hapus jawaban ini?
Dan Dascalescu
5

IntelliJ bekerja sangat baik untuk Node.js.

Selain itu, IntelliJ mendukung 'Bantuan Kode' dengan baik.

卢 声 远 Shengyuan Lu
sumber
4

Gunakan perintah ini

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect
Zahirul Haque
sumber
3

Cara cepat dan kotor untuk men-debug skrip Node.js kecil dengan debugger peramban favorit Anda adalah dengan menggunakan browserify . Perhatikan bahwa pendekatan ini tidak berfungsi dengan aplikasi apa pun yang memerlukan pustaka I / O asli, tetapi cukup baik untuk sebagian besar skrip kecil.

$ npm install -g browserify

Sekarang pindahkan semua var x = requires('x')panggilan Anda ke requires.jsfile dan jalankan:

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

(Kelemahan di sini adalah Anda harus memindahkan atau mengomentari requiressemua file Anda.)

Sertakan bundle.jsdalam file HTML seperti:

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

Sekarang muat file di browser Anda dan tekan F12dan viola: debug di browser.

Gerold Meisinger
sumber