2013-02-11 18 views
6

Mam skrypt napisany dla Node.Js, który zbiera ładunek danych, przetwarza go, zapisuje, a następnie kończy. Niestety, coś, co zrobiłem, uniemożliwia zakończenie skryptu i zamknięcie węzła, ale pozostaje otwarte.Węzeł debugowania, co to znaczy, że działa?

Najprawdopodobniej popracuję nad wprowadzonymi przeze mnie zmianami i spróbuję je wykryć, ale ... Czy istnieje łatwy sposób na debugowanie węzła i ustalenie, który kod/zdarzenie/wywołanie zwrotne/połączenie lub cokolwiek, na co czeka?

Spojrzałem na inspektora węzłów, ale nie mogłem wymyślić, jak wyśledzić wszystko, co pozostało otwarte. Jakakolwiek rada?

+0

Wydaje się być modułem dla logów, które nie zamykają się prawidłowo. Nie oznaczono tego jako odpowiedzi, ponieważ przydatne byłoby poznanie sposobu, w jaki węzeł czeka. –

Odpowiedz

5

Możesz uruchomić swój program node.js za pomocą wtfnode lub dodać require('wtfnode').init(); w pierwszym wierszu lub programie. Następnie wydrukuje listę wszystkich rzeczy utrzymujących węzeł otwarty po naciśnięciu klawisza ctrl + c, aby zakończyć proces.

3

Kiedy to się stało, najczęściej jest to coś takiego jak mongodb, amqp itd. To jest połączenie z bazą danych, połączenia sieciowe. Pamiętaj, aby zamknąć te, gdy skończysz przetwarzanie.

Domyślam się, że można użyć lsof -p <PID> i zobaczyć, co to mówi. Widzę tam zarówno mongoł, jak i amqp.

0

W miejscu, gdzie można oczekiwać, że do zamknięcia dodać

console.log(process._getActiveHandles()); 

Można również dodać obsługi

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

Więc jeśli węzeł nie zamyka się prawidłowo, Ctrl + C powie dlaczego.

+0

BTW dodając tę ​​odpowiedź, ponieważ wftnode nie działa dla mnie ze względu na to, że zapobiega uruchamianiu programów obsługi wyjścia. Kudos do myndzi za technikę. Polecam wtfnode, jeśli nie masz programów obsługi wyjścia. – teknopaul