Làm cách nào để gỡ lỗi các ứng dụng Node.js?


1578

Làm cách nào để gỡ lỗi ứng dụng máy chủ Node.js?

Ngay bây giờ tôi chủ yếu sử dụng gỡ lỗi cảnh báo với các câu lệnh in như thế này:

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

Phải có một cách tốt hơn để gỡ lỗi. Tôi biết rằng Google Chrome có trình gỡ lỗi dòng lệnh. Trình gỡ lỗi này có sẵn cho Node.js không?


3
Bạn có thể sử dụng Locus để tiêm dòng lệnh.
Ali Davut

5
Nếu bạn muốn gỡ lỗi với appoach IDE truyền thống, hãy sử dụng vscode sử dụng vscode youtube.com/watch?v=egBJ0cd0GLM
jw56578

4
Tôi đã thấy bài viết này rất thú vị và nó hoạt động rất tốt với tôi: Gỡ lỗi Node.js với DevTools của Chrome . Hy vọng nó sẽ giúp :)
Timbergus

2
"gỡ lỗi cảnh báo" :)
The Red Pea

Hãy nhớ rằng bạn cần chạy gật đầu với --inspect-brkINSTEAD OF --inspectnếu bạn muốn gỡ lỗi mã máy chủ thực tế khi tải. Xem stackoverflow.com/questions/59596138
Jorge Orpinel

Câu trả lời:


1261

nút thanh tra có thể tiết kiệm trong ngày! Sử dụng nó từ bất kỳ trình duyệt hỗ trợ WebSocket . Breakpoint, profiler, livecoding, v.v ... Nó thực sự tuyệt vời.

Cài đặt nó với:

npm install -g node-inspector

Sau đó chạy:

node-debug app.js

14
Mong nút thanh tra đã hoạt động. Các thành phần hồ sơ cần phải có được một số tình yêu.
Jonathan Dumaine

13
Thật không may cho tôi, trình kiểm tra nút không hoạt động với các phiên bản mới nhất của Node.js và nó không hỗ trợ đăng nhập vào bảng điều khiển trình duyệt kể từ v0.1. nút-codein chỉ là lỗi. Vì vậy, tôi đã viết mô-đun của riêng mình để giúp gỡ lỗi bằng cách cho phép bạn kết xuất các đối tượng và như vậy vào bảng điều khiển trình duyệt web của bạn. Tôi nghĩ rằng nó có thể được sử dụng cho người khác: nút-khỉ . Thêm vào đó, nó hoạt động trong cả Firefox VÀ Chrome.
Justin Warkentin

7
Vì đây là một công cụ phổ biến và tuyệt vời như vậy, chắc chắn thực tế là tác giả ban đầu đã thừa nhận họ không còn tài nguyên để duy trì nó sẽ không phải là vấn đề vì cộng đồng nguồn mở có thể chọn nó?
PeterT

34
Hiện thanh tra hiện đang được StrongLoop tích cực bảo trì và đang hoạt động trở lại với phiên bản mới nhất (0,3)! Thông báo tại đây: blog.strongloop.com/ từ
balupton

21
"Kể từ phiên bản 6.3, Node.js cung cấp trình gỡ lỗi dựa trên DevTools, phần lớn không dùng Node Inspector, xem ví dụ bài đăng trên blog này để bắt đầu. Trình gỡ lỗi tích hợp được phát triển trực tiếp bởi nhóm V8 / Chromium các tính năng (ví dụ: dấu vết ngăn xếp dài / không đồng bộ) quá khó thực hiện trong Trình kiểm tra nút. " - cho biết repo thanh tra nút
ThisClark

750

Gỡ lỗi

Hồ sơ

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

Heapdumps

Ngọn lửa

Truy tìm

Ghi nhật ký

Các thư viện xuất thông tin gỡ lỗi

Các thư viện tăng cường thông tin theo dõi ngăn xếp

Điểm chuẩn

Khác

Di sản

Chúng sử dụng để làm việc nhưng không còn được duy trì hoặc không còn áp dụng cho các phiên bản nút hiện đại.


8
Giới thiệu về Nodetime: đối với những người không muốn gửi dữ liệu của họ đến các máy chủ gật đầu, có một "thay thế" cục bộ (vẫn dựa trên thời gian gật đầu), lookmô-đun, như được chỉ ra trong stackoverflow.com/questions/12864221/nodejs-memory- hồ sơ
thực sự

Tôi không thấy các báo cáo cpu từ gật đầu rất hữu ích: 1. Tôi chỉ nhận được một cây phương thức, không có thời gian "tự". 2. Có vẻ như các nhánh cây được cắt tỉa dưới một số lượng nhất định. Cả hai làm cho nó rất khó để hủy bỏ nơi mà cpu dành phần lớn thời gian của nó.
shacharz

npm install -g profiler phàn nàn về việc mất python trên windows 7. Tôi đã cố gắng đặt python = C: \ Python34 \, nhưng điều này gây ra sự cố.
Stepan Yakovenko

Các hồ sơ duy nhất làm việc ra khỏi hộp là gật đầu. Nhưng stacktrace profpu profiling của nó là không thể sử dụng (nó không cung cấp đủ chi tiết). Các công cụ của Nodejs 4 msvc 2012 cũng có trình biên dạng, nhưng nó cũng đã báo cáo lỗi không thể sửa được nghiêm trọng ...
Stepan Yakovenko

Trình hồ sơ duy nhất làm việc cho tôi là nprof+ v8.logtừ node --prof.
Dan Abramov

253

Trình gỡ lỗi V8 được phát hành như một phần của Công cụ dành cho nhà phát triển Google Chrome có thể được sử dụng để gỡ lỗi các tập lệnh Node.js. Một lời giải thích chi tiết về cách thức tác phẩm này có thể được tìm thấy trong wiki Node.js GitHub .


12
Tôi quan tâm, sau bài thuyết trình tại Google IO mà Paul Irish và Pavel đã làm, giờ đây có thể gỡ lỗi node.js thẳng tới Công cụ dành cho nhà phát triển Chrome mà không cần nhật thực không?
balupton

+1 Làm việc rất tốt cho tôi. Sử dụng phiên bản Eclipse 3.x, x64 mới trên Mac OS X. Các hướng dẫn cài đặt cũng được viết tốt. Cảm ơn bạn.
barista nghiệp dư

Cũng xuất hiện trong Nodeclipse gậteclipse.org (với một số lỗi liên quan đến Node.js)
Paul Verest

Mục nhập của tôi vào đấu trường này là trepanjs ( npmjs.com/package/trepanjs ). Nó có tất cả các ưu điểm của trình gỡ lỗi nút, nhưng phù hợp hơn với gdb. Nó cũng có nhiều tính năng và lệnh hơn như tô sáng cú pháp, trợ giúp trực tuyến rộng rãi hơn và đánh giá thông minh hơn. Xem github.com/rocky/trepanjs/wiki/Cool-things để biết một số tính năng thú vị của nó.
đá

1
Tính năng này hiện có sẵn trong các phiên bản hàng đêm. Kiểm tra tại đây để được hướng dẫn:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
zeronone

191

Node có trình gỡ lỗi GUI được tích hợp sẵn từ phiên bản 6.3 (sử dụng DevTools của Chrome)

Nút gỡ lỗi GUI dựng sẵn

Chỉ cần chuyển cờ thanh tra và bạn sẽ được cung cấp URL tới thanh tra viên:

node --inspect server.js

Bạn cũng có thể phá vỡ dòng đầu tiên bằng cách vượt qua --inspect-brkthay thế.


2
Không giảm giá các bước trên, mà chỉ để chia sẻ ... Tôi đã cố gắng tạo một trình bao bọc mạnh hơn một chút, cũng như dễ cài đặt hơn. Xem: github.com/jaridmargolin/inspect- process
Jarid R. Margolin

1
@ JaridR.Margolin Đẹp. Tôi đã cập nhật câu trả lời để sử dụng thay thế. Dễ dàng hơn nhiều để thiết lập và hoạt động tốt hơn :)
gregers

2
Câu trả lời này hiện đang ở dưới cùng và nó là người duy nhất thực sự làm việc cho tôi. Đây là lật tuyệt vời!
LOAS

3
Trong trường hợp nó giúp được bất cứ ai, tôi đã đưa ra một video giải thích quá trình này tại youtu.be/rtZKUnks6jI .
RoccoB

2
Nơi mà bạn có chủ đề tối cho các công cụ phát triển chrome?
Pieter Meiresone

93

Phiên bản Node.js 0.3.4+ có hỗ trợ gỡ lỗi tích hợp.

node debug script.js

Hướng dẫn sử dụng: http://nodejs.org/api/debugger.html


1
Bạn có bất kỳ liên kết đến tài liệu về cách sử dụng nó?
Fabian Jakobs

2
Tôi không có tài liệu nào. vừa cập nhật lên v0.3.5. đặt một dòng "trình gỡ lỗi;" trong mã của bạn sẽ hoạt động như điểm dừng. Nó hoạt động như ndb / gdb. sau khi bạn thực hiện kiểu "nút gỡ lỗi script.js". bạn sẽ thấy lệnh nó hỗ trợ. p = print, l = list ... vì vậy bạn không cần phải nhập toàn bộ thế giới
JulianW

2
Lưu ý, trong cửa sổ, đó là "node.exe --debug myscript.js" nhưng nó vẫn không hoạt động.
Marc

6
Bạn có thể phải thay đổi --debugđể debugkhông có dấu gạch ngang. Đó là cách cuối cùng tôi đã làm cho nó hoạt động. Thật khó hiểu --debugdebuglàm hai việc khác nhau.
benekastah

Làm thế nào để bạn có được chương trình để thực sự chạy? "r -> app is already running...", khi tôi cố gắng tiếp tục và tôi gặp phải một câu lệnh đang cố lấy đầu vào, nó sẽ đưa tôi trở lại tại dấu nhắc gỡ lỗi thay vì để tôi nhập dữ liệu được yêu cầu.
Michael

70

Visual Studio Code sẽ là lựa chọn của tôi để gỡ lỗi. Không có chi phí cài đặt bất kỳ công cụ hoặcnpm installcông cụ. Chỉ cần đặt điểm bắt đầu của ứng dụng của bạn trong pack.json và VSCode sẽ tự động tạo một tệp cấu hình bên trong giải pháp của bạn. Nó được xây dựng trênElectron, trên đó các trình soạn thảo như Atom được xây dựng.

Mã VS cho trải nghiệm gỡ lỗi tương tự như bạn có thể có trong các IDE khác như VS, Eclipse, v.v.

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


Thật tuyệt nhưng nó có độ trễ. Đó là lý do tại sao tôi thích Sublime hơn bao giờ hết.
calbertts

3
nhưng cao siêu không có trình gỡ lỗi và tôi nghĩ mã VS cũng khá nhanh
Syed Faizan

1
Tôi có giấy phép siêu phàm từ 5 năm trước. Từ vài tháng trước tôi thậm chí không cài đặt Sublime Text, chỉ là vscode. Out of the box có rất nhiều công cụ mà tôi bỏ lỡ trong Sublime (như thiết bị đầu cuối tích hợp ..).
elboletaire

luôn hỏi tôi về một thư mục cấu hình, nó không hoạt động ngoài hộp
carkod

@carkod kích hoạt tùy chọn tự động đính kèm mã và sử dụng thiết bị đầu cuối vs mã để bắt đầu tập lệnh của bạn, nút ex --inspect file-name.js
Vipul Dessai

57

Cá nhân tôi sử dụng JetBrains WebStorm vì đây là IDE JavaScript duy nhất mà tôi đã tìm thấy, nó rất tốt cho cả JavaScript frontend và backend.

Nó hoạt động trên nhiều hệ điều hành và có Node.js được tích hợp sẵn (cũng như rất nhiều thứ khác] ( http://www.jetbrains.com/webstorm/features/index.html ).

Mục 'vấn đề' / danh sách mong muốn duy nhất của tôi Chúng tôi :

  1. Nó dường như đói tài nguyên trên Mac hơn Windows Nó không còn là một vấn đề trong phiên bản 6.
  2. Sẽ thật tuyệt nếu nó có hỗ trợ Snippet (như các văn bản của Sublime Text 2 - tức là gõ 'vui vẻ' và nhấn 'tab' để đặt một chức năng. Xem bình luận @WickyNilliams bên dưới - Với Mẫu trực tiếp, bạn cũng có hỗ trợ đoạn trích.

10
webstorm không có đoạn mã hỗ trợ BTW ;-) mặc dù chúng được gọi là "Mẫu trực tiếp" thay vì đoạn trích.
WickyNilliams

3
Nếu bạn chỉ muốn gỡ lỗi một ứng dụng node.js và đã có giấy phép Intellij IDEA, bạn có thể chỉ cần cài đặt plugin node.js mà không phải mua giấy phép WebStorm. Thiết lập cấu hình run / debug rất dễ dàng khi plugin được cài đặt.
Josh Liptzin

42

Rất nhiều câu trả lời hay ở đây, nhưng tôi muốn thêm quan điểm của mình (dựa trên cách tiếp cận của tôi phát triển)

Nhật ký gỡ lỗi

Chúng ta hãy đối mặt với điều đó, tất cả chúng ta đều yêu thích một điều tốt console.log('Uh oh, if you reached here, you better run.')và đôi khi nó hoạt động rất tốt, vì vậy nếu bạn không muốn di chuyển quá xa khỏi nó thì ít nhất hãy thêm một chút vào nhật ký của bạn bằng cách gỡ lỗi của Visionmedia .

Gỡ lỗi tương tác

Tiện dụng như ghi nhật ký bàn điều khiển, để gỡ lỗi một cách chuyên nghiệp, bạn cần xắn tay áo lên và bị kẹt. Đặt điểm dừng, bước qua mã của bạn, kiểm tra phạm vi và các biến để xem điều gì gây ra hành vi kỳ lạ đó. Như những người khác đã đề cập, thanh tra nút thực sự là những con ong-đầu gối. Nó thực hiện mọi thứ bạn có thể làm với trình gỡ lỗi tích hợp, nhưng sử dụng giao diện DevTools quen thuộc của Chrome đó. Nếu, giống như tôi, bạn sử dụng Webstorm , thì đây là một hướng dẫn hữu ích để gỡ lỗi từ đó.

Dấu vết ngăn xếp

Theo mặc định, chúng tôi không thể theo dõi một loạt các hoạt động qua các chu kỳ khác nhau của vòng lặp sự kiện (đánh dấu). Để giải quyết vấn đề này, hãy xem longjohn (nhưng không sản xuất!).

Rò rỉ bộ nhớ

Với Node.js, chúng tôi có thể có một quy trình máy chủ dự kiến ​​sẽ duy trì trong một thời gian đáng kể. Bạn sẽ làm gì nếu bạn nghĩ rằng nó đã xuất hiện một số rò rỉ khó chịu? Sử dụng heapdump và Chrome DevTools để so sánh một số ảnh chụp nhanh và xem những gì đang thay đổi.


Đối với một số bài viết hữu ích, hãy xem

Nếu bạn cảm thấy muốn xem một video

Dù bạn chọn con đường nào, chỉ cần chắc chắn rằng bạn hiểu cách bạn đang gỡ lỗi

nhập mô tả hình ảnh ở đây

Đó là một điều đau đớn
để nhìn vào rắc rối của chính bạn và biết
rằng chính bạn và không ai khác đã làm cho nó

Sophocles, Ajax


41

Theseus là một dự án của nghiên cứu Adobe cho phép bạn gỡ lỗi mã Node.js của mình trong Chân đế trình soạn thảo mã nguồn mở . Nó có một số tính năng thú vị như bảo hiểm mã thời gian thực, kiểm tra hồi tố, cây gọi không đồng bộ.

ảnh chụp màn hình


Điều này khá tuyệt, vẫn không biết Backtrace cho tho
misaxi

Tôi hiện đang yêu Theseus, nhưng tôi vẫn gặp một số vấn đề cần đặt điểm dừng và theo dõi. Tôi hiện đang phải tắt ứng dụng của mình, bắt đầu nút bằng --debug, theo dõi trhough và sau đó khởi động ứng dụng bằng nút-Theseus. Có thể sử dụng Theseus với các điểm dừng? Tôi đã thử tìm kiếm trên trang GitHub, StackOverflow và các diễn đàn, nhưng không có may mắn cho đến nay. Tui bỏ lỡ điều gì vậy?
Eugene

25

Công cụ Node.js cho Visual Studio 2012 hoặc 2013 bao gồm trình gỡ lỗi. Tổng quan ở đây nêu rõ "Công cụ Node.js cho Visual Studio bao gồm hỗ trợ đầy đủ để gỡ lỗi các ứng dụng nút." Là người mới đối với Node.js, nhưng có nền tảng về .NET, tôi đã tìm thấy tiện ích bổ sung này là một cách tuyệt vời để gỡ lỗi các ứng dụng Node.js.


23

Visual Studio Code có hỗ trợ gỡ lỗi Node.js thực sự tốt. Nó là miễn phí, mã nguồn mở và đa nền tảng và chạy trên Linux, OS X và Windows.

Bạn thậm chí có thể gỡ lỗi các tác vụ grunt và gulp , nếu bạn cần ...


1
Bắt đầu từ Visual Studio Code 8.0, hỗ trợ gỡ lỗi cho OSX và Linux thực sự tốt.
bgse

Sau khi dành cả buổi tối để trình kiểm tra nút và mạnh mẽ hoạt động dưới cửa sổ (Cộng đồng Visual Studio, hạ cấp xuống npm 2, cài đặt python, biến env, sử dụng cmd không babun / cygwin, v.v.) và sau đó chơi với nó trong một giờ , Tôi phải nói rằng đây là tùy chọn tốt nhất ít nhất là trong các cửa sổ và có thể nói chung (nếu bạn không có webstorn)
gạch ngang

22

Tôi đã viết một cách tiếp cận khác để gỡ lỗi mã Node.js ổn định và cực kỳ đơn giản. Nó có sẵn tại https://github.com/sa/iron-node .

Nhập mô tả hình ảnh ở đây

Một trình gỡ lỗi trực quan đa nền tảng mã nguồn mở.

Cài đặt:

npm install iron-node -g;

Gỡ lỗi:

iron-node yourscript.js;



15

Sử dụng Chrome Phiên bản 67.0.3394.62 (+)

  1. Chạy ứng dụng nút

nút --inspect-brk = 0.0.0.0: 9229 server.js (tên tệp js của máy chủ)

  1. Duyệt ứng dụng của bạn trong chrome, ví dụ: "localhost: port"
  2. Mở DevTools.
  3. Nhấp vào biểu tượng nút bên cạnh biểu tượng thiết bị phản hồi.

nhập mô tả hình ảnh ở đây

Sẽ có một cửa sổ DevTools khác sẽ bật ra đặc biệt để gỡ lỗi ứng dụng nút.

nhập mô tả hình ảnh ở đây


13

Tôi đã tạo ra một công cụ nhỏ gọn gọi là pry.js có thể giúp bạn.

Đặt một câu lệnh đơn giản ở đâu đó trong mã của bạn, chạy tập lệnh của bạn một cách bình thường và nút sẽ tạm dừng luồng hiện tại cho phép bạn truy cập vào tất cả các biến và hàm của bạn. Xem / chỉnh sửa / xóa chúng theo ý muốn!

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

Bắt đầu quá trình nút của bạn với cờ --inspect .

node --inspect index.js

và sau đó mở chrome://inspectbằng chrome. Nhấp vào liên kết "Mở DevTools dành riêng cho nút" hoặc cài đặt tiện ích mở rộng chrome này để dễ dàng mở DevTools chrome.

Để biết thêm thông tin tham khảo liên kết này


7

Nếu bạn cần một thư viện ghi nhật ký mạnh mẽ cho Node.js, Tracer https://github.com/baryon/tracer là lựa chọn tốt hơn.

Nó xuất ra các thông điệp tường trình với dấu thời gian, tên tệp, tên phương thức, số dòng, đường dẫn hoặc ngăn xếp cuộc gọi, bảng điều khiển màu hỗ trợ và cơ sở dữ liệu hỗ trợ, tệp, truyền tải luồng dễ dàng. Tôi là tác giả.


7

Giả sử bạn đã cài đặt trình kiểm tra nút trên máy tính của mình (nếu không, chỉ cần nhập 'npm install -g node-Inspector'), bạn chỉ cần chạy:

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

Và dán URI từ dòng lệnh vào trình duyệt WebKit (Chrome / Safari).


1
thanh tra nút đã được đề cập; có thể xóa câu trả lời này?
Dan Dascalescu





4

Các NetBeans IDE được ghé thăm Node.js hỗ trợ từ phiên bản 8.1 :

<...>

Điểm nổi bật tính năng mới

Phát triển ứng dụng Node.js

  • Trình hướng dẫn dự án Node.js mới
  • Trình hướng dẫn Node.js Express mới
  • Trình chỉnh sửa JavaScript nâng cao
  • Hỗ trợ mới để chạy các ứng dụng Node.js
  • Hỗ trợ mới để gỡ lỗi các ứng dụng Node.js.

<...>

Tham khảo thêm:

  1. NetBeans Wiki / NewAndNoteworthyNB81 .
  2. Ứng dụng Node.js Express trong NetBeans IDE, Geertjan-Oracle .

4

Sử dụng lệnh này

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


3

Một cách nhanh chóng và bẩn thỉu để gỡ lỗi các tập lệnh Node.js nhỏ với trình gỡ lỗi trình duyệt yêu thích của bạn sẽ là sử dụng browserify . Lưu ý rằng phương pháp này không hoạt động với bất kỳ ứng dụng nào yêu cầu thư viện I / O gốc, nhưng nó đủ tốt cho hầu hết các tập lệnh nhỏ.

$ npm install -g browserify

Bây giờ di chuyển tất cả các var x = requires('x')cuộc gọi của bạn vào một requires.jstệp và chạy:

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

(Nhược điểm ở đây là bạn phải di chuyển hoặc nhận xét requirestrong tất cả các tệp của mình.)

Bao gồm bundle.jstrong một tệp HTML như vậy:

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

Bây giờ tải tệp trong trình duyệt của bạn và nhấn F12và viola: gỡ lỗi trong trình duyệt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.