Node.js v6.0.0 上 Visual Studio 代码 (F5) 上的集群问题
Posted
技术标签:
【中文标题】Node.js v6.0.0 上 Visual Studio 代码 (F5) 上的集群问题【英文标题】:Issue with Cluster on Visual studio code (F5) on Node.js v6.0.0 【发布时间】:2016-08-28 23:22:01 【问题描述】:我对带有 Cluster
的 Visual Studio 代码 有一些问题编辑
如果我按下 Ctrl + F5,它可以正常工作,除了 F5 之外它还在做什么,我是否需要始终使用 Ctrl 启动命令?
---
当使用 VS Code Launch 命令(F5) 启动时,worker 似乎永远不会启动。我是否需要对 .vscode/launch.json 文件进行一些更改以使集群正常工作。
实际代码复制自 Node.js 6 api https://nodejs.org/api/cluster.html#cluster_cluster
npm test Windows 命令提示符显示:
Master started
Listening port 80
Listening port 80
Listening port 80
Listening port 80
VS Code (F5) 调试控制台显示:
node --debug-brk=7601 --nolazy index.js
Debugger listening on port 7601
Master started
Debugger listening on port 7602
Debugger listening on port 7603
Debugger listening on port 7604
Debugger listening on port 7605
VS 代码启动.json
"version": "0.2.0",
"configurations": [
"name": "Launch",
"type": "node",
"request": "launch",
"program": "$workspaceRoot/index.js",
"stopOnEntry": false,
"args": [],
"cwd": "$workspaceRoot",
..........
index.js
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster)
// Fork workers.
console.log('Master started')
for (var i = 0; i < numCPUs; i++)
cluster.fork();
cluster.on('exit', (worker, code, signal) =>
console.log(`worker $worker.process.pid died`);
);
else
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) =>
res.writeHead(200);
res.end('hello world\n');
).listen(80);
console.log('Listening port 80')
【问题讨论】:
【参考方案1】:我遇到了同样的问题。 weinand 在https://github.com/Microsoft/vscode/issues/3201 中描述的第二种解决方法对我有用:
从终端启动节点并使用 VS Code 附加到它 调试器。
在终端运行:node --debug app.js
然后选择默认的“附加”启动配置并 附在上面。
如果您确实想要调试任何 worker 而不仅仅是启动的第一个进程。
【讨论】:
用于开发,只调试master可以做:process.execArgv[0] = process.execArgv[0].replace('-brk', '');【参考方案2】:我在使用 Cluster 的 Visual Studio 代码上遇到了同样的问题。
我发现有一些肮脏的方法可以使它起作用。
Mac OS X:
/应用程序/Visual Studio Code.app/Contents/Resources/app/extensions/node-debug/out/node/nodeDebug.js
Windows:
C:\Program Files (x86)\Microsoft VS Code\resources\app\extensions\node-debug\out\node\nodeDebug.js
改变这个
if (!this._noDebug)
launchArgs.push("--debug-brk=" + port);
到
if (!this._noDebug)
launchArgs.push("--debug=" + port);
我知道这不是解决问题的最佳方法,但到目前为止它对我有用。
【讨论】:
这只是不会启用调试器,也不会命中任何断点以上是关于Node.js v6.0.0 上 Visual Studio 代码 (F5) 上的集群问题的主要内容,如果未能解决你的问题,请参考以下文章
在Visual Studio上开发Node.js程序——远程调试及发布到Azure
Visual Studio Code调试node.js:无法在PATH上找到运行时的node