一尘不染

如何调试Node.JS子派生进程?

node.js

我正在尝试调试使用以下方法创建的子Node.JS进程:

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

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

debugger listening on port 40893
debugger listening on port 40893

因此,它仅调试父进程。

有什么方法可以设置IntelliJ来调试子进程或强制其在其他端口上启动,以便我可以在远程调试中进行连接?


阅读 269

收藏
2020-07-07

共1个答案

一尘不染

这是node.js中一个已知的错误,该错误最近已得到修复(尽管未反向移植到v0.10)。

有关更多详细信息,请参见此问题:https :
//github.com/joyent/node/issues/5318

有一种解决方法,您可以更改每个工作进程的命令行,尽管并不是要以此方式使用API​​(该解决方法将来可能会停止工作)。这是来自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);
}
2020-07-07