如何debuggingNode.JS子分叉进程?

我试图debugging使用以下命令创build的子Node.JS进程:

var child = require('child_process'); child .fork(__dirname + '/task.js'); 

问题是,在IntelliJ / WebStorm中运行时,父进程和subprocess都在同一个端口上启动。

 debugger listening on port 40893 debugger listening on port 40893 

所以它只debugging父进程。

有没有什么办法来设置IntelliJ来debuggingsubprocess或强制它启动在不同的端口,所以我可以在远程debugging连接它?

这是node.js中的一个已知错误,最近已经修复(虽然没有反向移植到v0.10)。

看到这个问题的更多细节: https : //github.com/joyent/node/issues/5318

有一种解决方法,即为每个工作进程更改命令行,尽pipeAPI并不意味着以这种方式使用(解决方法可能在将来停止工作)。 以下是github问题的源代码:

 var cluster = require('cluster'); var http = require('http'); if (cluster.isMaster) { var debug = process.execArgv.indexOf('--debug') !== -1; cluster.setupMaster({ execArgv: process.execArgv.filter(function(s) { return s !== '--debug' }) }); for (var i = 0; i < 2; ++i) { if (debug) cluster.settings.execArgv.push('--debug=' + (5859 + i)); cluster.fork(); if (debug) cluster.settings.execArgv.pop(); } } else { var server = http.createServer(function(req, res) { res.end('OK'); }); server.listen(8000); } 

是。 你必须在一个新的端口上产生你的进程。 有一个解决方法来debugging群集,就像你可以做的那样:

使用–debug命令启动您的应用程序,然后:

 var child = require('child_process'); var debug = typeof v8debug === 'object'; if (debug) { //Set an unused port number. process.execArgv.push('--debug=' + (40894)); } child.fork(__dirname + '/task.js'); 

debugger listening on port 40894

如果“process.execArgv”certificate你不得不尝试:

 if (debug) { process.argv.push('--debug=' + (40894)); } 

这对我工作..

有一个更现代的方式来debuggingChrome DevTools的儿童(或任何)的过程。

用arg启动你的应用程序

 --inspect 

如下所示:

 node --debug=9200 --inspect app/main.js 

您将看到每个subprocess的URL信息:

 Debugger listening on port 9200. Warning: This is an experimental feature and could change at any time. To start debugging, open the following URL in Chrome: chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9200/207f2ab6-5700-4fc5-b6d3-c49a4b34a311 Debugger listening on port 9201. Warning: This is an experimental feature and could change at any time. To start debugging, open the following URL in Chrome: chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9201/97be3351-2ea1-4541-b744-e720188bacfa Debugger listening on port 9202. Warning: This is an experimental feature and could change at any time. To start debugging, open the following URL in Chrome: chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9202/8eb8384a-7167-40e9-911a-5a8b902bb8c9 

如果你想debugging远程进程,只需将地址127.0.0.1更改为你自己的。

快速简单的修复(使用chrome:// inspect /#设备)

 var child = require('child_process'); child.fork(__dirname + '/task.js',[],{execArgv:['--inspect-brk']}); 

然后在没有任何–inspect-brk的情况下运行你的应用程序,主进程不会debugging,但分叉进程将不会发生冲突。

debugging主进程时停止fork冲突;

 child.fork(__dirname + '/task.js',[],{execArgv:['--inspect=xxxx']}); 

其中xxxx是一些不用于debugging主进程的端口。 尽pipe在debugging器中我没有设法轻松地同时连接两者,即使它报告为聆听。