我有一个相当复杂的脚本,它打开套接字,HTTP服务器,读取/写入文件,设置超时等。达到某些条件时,所有这些都应该停止 - 我正在清除所有超时,关闭所有服务器和等等。
但有时候这个过程会停止,有时它会等待某些事情发生。我可以杀死节点进程,但我想找出该行为的原因,修复它并使进程自行停止。是否有可能调试阻止其退出的内容?
更新
我遵循了Jan的建议,这就是我在尝试“调试”一个简单的setTimeout
电话时得到的结果:
/tmp/node2/bin/node test.js
[debug] UV_TIMER 0x1cdfd20 (fd:910168617, refs:0, flags:0x0)
[debug] UV_ASYNC 0xc096e8 (fd:0, refs:-1, flags:0x0)
[debug] UV_ASYNC 0xc09658 (fd:0, refs:0, flags:0x0)
[debug] UV_IDLE 0xc09778 (fd:0, refs:-2, flags:0x0)
[debug] UV_ASYNC 0xc041c0 (fd:0, refs:-1, flags:0x0)
[debug] UV_ASYNC 0xc03de0 (fd:0, refs:-1, flags:0x0)
[debug] UV_TIMER 0xc03d40 (fd:0, refs:-1, flags:0x0)
[debug] UV_IDLE 0xc03ca0 (fd:0, refs:-1, flags:0x0)
[debug] UV_CHECK 0xc03c00 (fd:0, refs:-1, flags:0x0)
[debug] UV_IDLE 0xc03a00 (fd:0, refs:-1, flags:0x0)
[debug] UV_CHECK 0xc03b60 (fd:0, refs:-1, flags:0x0)
[debug] UV_PREPARE 0xc03ac0 (fd:0, refs:-1, flags:0x0)
所以这对我来说不是很有用,但我想没有其他选择。
答案 0 :(得分:1)
不容易。您可以编译this patched version node.js,用它启动您的应用程序(node appname.js
),然后运行:
pkill -USR2 node
这将打印出当时事件循环中的所有活动句柄。
N.B。这是一个四个月大的版本,所以它有点过时了。它应该在某个时刻进入节点,但还没有计划。