如何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器中我没有设法轻松地同时连接两者,即使它报告为聆听。
- 如何重新连接到node.js的远程debugging器
- 无法在intellij phpstorm和idea中打开一个nodejs项目
- 如何在Intellij中的GLOBAL范围内使用Node.js库启用代码完成?
- 如何使用IntelliJ创build/导入裸node.js模块(没有expression)
- IntelliJ Node.jsdebugging进程退出-1
- 更改本地主机服务器文件是从使用节点(Webstorm /也许IntelliJ)
- 我如何configurationIntelliJ的全栈JavaScript的Web应用程序?
- IntelliJ IDEA – nodejs插件 – passport.initialize()未解决
- intellij想法build立空的node.js项目