2013-02-11 37 views
6

Tôi có một tập lệnh được viết cho Node.Js thu thập tải dữ liệu, xử lý dữ liệu, lưu và sau đó kết thúc. Thật không may một cái gì đó tôi đã làm đó là ngăn chặn các kịch bản từ kết thúc và nút đóng cửa, thay vào đó nó vẫn mở.Debug Node, điều gì đang giữ cho nó hoạt động?

Có lẽ tôi sẽ làm việc theo cách của mình thông qua những thay đổi tôi đã thực hiện và cố gắng theo dõi nó, nhưng ... Có cách dễ dàng để gỡ lỗi nút và tìm hiểu mã/sự kiện/gọi lại/kết nối hay không bất cứ điều gì, mà nó đang chờ đợi?

Tôi đã xem xét trình kiểm tra nút nhưng tôi không thể tìm ra cách theo dõi bất kỳ thứ gì giữ nó mở. Lời khuyên nào?

+0

Xuất hiện làm mô-đun cho các bản ghi không đóng đúng cách. Chưa đánh dấu câu trả lời này vì nó vẫn hữu ích khi biết cách tìm ra nút nào đang chờ đợi. –

Trả lời

5

Bạn có thể chạy chương trình node.js bằng cách sử dụng wtfnode hoặc thêm require('wtfnode').init(); trên dòng đầu tiên hoặc chương trình của bạn. Sau đó, nó sẽ in danh sách tất cả những thứ giữ nút mở khi bạn nhấn ctrl + c để hủy quá trình.

3

Khi tôi đã có điều này xảy ra nó thường là một cái gì đó giống như mongodb, amqp vv Đó là kết nối cơ sở dữ liệu, kết nối mạng. Hãy chắc chắn rằng bạn đóng những khi bạn đã xử lý xong.

Tôi đoán bạn có thể sử dụng lsof -p <PID> và xem điều gì nói. Tôi có thể thấy cả hai mongodb và amqp trong đó.

0

Tại điểm mà bạn mong đợi nó để đóng thêm

console.log(process._getActiveHandles()); 

Bạn cũng có thể thêm một handler

process.on('SIGINT',() => console.log(process._getActiveHandles())); 

Vì vậy, nếu nút không đóng đúng, Ctrl + C sẽ cho bạn biết lý do tại sao.

+0

BTW thêm câu trả lời này bởi vì wftnode không làm việc cho tôi do thực tế nó ngăn cản xử lý thoát khỏi chạy. Kudos để myndzi cho kỹ thuật này. Tôi sẽ recomment wtfnode nếu bạn không có xử lý xuất cảnh. – teknopaul

Các vấn đề liên quan