使用cluster.fork()debuggingNode.js进程

我有一些代码看起来非常像http://nodejs.org/docs/v0.6.0/api/cluster.html中的Cluster文档中的示例:

var cluster = require('cluster'); var server = require('./mycustomserver'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { var i; // Master process for (i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('death', function (worker) { console.log('Worker ' + worker.pid + ' died'); }); } else { // Worker process server.createServer({port: 80}, function(err, result) { if (err) { throw err; } else { console.log('Thread listening on port ' + result.port); } }); } 

我已经安装了节点检查器,并尝试使用它和Eclipse V8插件详细https://github.com/joyent/node/wiki/Using-Eclipse-as-Node-Applications-Debuggerdebugging我的应用程序,但它看起来像我不能挂钩一个debugging器分叉群集实例把断点放在有趣的服务器逻辑 – 我只能debugging生成群集进程的应用程序的一部分。 有人知道我是否可以实际上做这样的事情,或者我将不得不重构我的应用程序在debugging模式下只使用一个线程?

我是一个Node.js新手,所以我希望有一些明显的我在这里失踪。

 var fixedExecArgv=[]; fixedExecArgv.push('--debug-brk=5859'); cluster.setupMaster({ execArgv: fixedExecArgv }); 

信贷去谢尔盖的职位 。

我改变了我的server.js分叉只有一个工人主要是为了testing,然后添加代码上面的代码。 这为我解决了debugging问题。 谢谢谢尔盖解释和提供解决scheme!

我已经在这里打开了一张票: https : //github.com/dannycoates/node-inspector/issues/130

虽然目前尚未修复,但还是有一个解决方法:

FWIW:我怀疑是因为节点debugging器需要绑定到debugging端口(默认:5858)。 如果你正在使用集群,我猜测主/控制器先绑定,并成功,造成子/工作者的绑定失败。 虽然一个端口可以提供给节点–debug = N,但是当在集群内为工作者调用节点时,似乎没有简单的方法来做到这一点(可能以编程方式设置process.debug_port,然后启用debugging,但我还没有得到那个工作)。 这留下了一堆select:1)启动节点没有–debug选项,一旦运行,find你想debugging/configuration文件的工作进程的PID,并发送一个USR1信号来启用debugging。 另一个select是编写一个节点的包装器,每次调用真实的节点二进制文件–debug设置为一个唯一的端口。 Cluster中可能还有一些选项可以让你像arg那样通过。