diff options
author | Miroslav Bajtoš <miro.bajtos@gmail.com> | 2013-05-02 08:34:22 +0200 |
---|---|---|
committer | Ben Noordhuis <info@bnoordhuis.nl> | 2013-05-08 16:53:52 -0700 |
commit | 43ec1b1c2e77d21c7571acd39860b9783aaf5175 (patch) | |
tree | 0a1ba5edab784e4f29f0b1f8fa1cdd3bf17b5f5d /lib/cluster.js | |
parent | 56492de5b9bcc6f34a39617b4687283c18f76693 (diff) | |
download | android-node-v8-43ec1b1c2e77d21c7571acd39860b9783aaf5175.tar.gz android-node-v8-43ec1b1c2e77d21c7571acd39860b9783aaf5175.tar.bz2 android-node-v8-43ec1b1c2e77d21c7571acd39860b9783aaf5175.zip |
debugger, cluster: each worker has new debug port
Implement support for debugging cluster workers. Each worker process
is assigned a new debug port in an increasing sequence.
I.e. when master process uses port 5858, then worker 1 uses port 5859,
worker 2 uses port 5860, and so on.
Introduce new command-line parameter '--debug-port=' which sets debug_port
but does not start debugger. This option works for all node processes, it
is not specific to cluster workers.
Fixes joyent/node#5318.
Diffstat (limited to 'lib/cluster.js')
-rw-r--r-- | lib/cluster.js | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/lib/cluster.js b/lib/cluster.js index 6503cb5f90..45b1224eb0 100644 --- a/lib/cluster.js +++ b/lib/cluster.js @@ -59,6 +59,25 @@ else workerInit(); +function createWorkerExecArgv(masterExecArgv, worker) { + var args = masterExecArgv.slice(); + var debugPort = process.debugPort + worker.id; + var hasDebugArg = false; + + for (var i = 0; i < args.length; i++) { + var match = args[i].match(/^(--debug|--debug-brk)(=\d+)?$/); + if (!match) continue; + args[i] = match[1] + '=' + debugPort; + hasDebugArg = true; + } + + if (!hasDebugArg) + args = ['--debug-port=' + debugPort].concat(args); + + return args; +} + + function masterInit() { cluster.workers = {}; @@ -93,6 +112,13 @@ function masterInit() { settings.execArgv = settings.execArgv.concat(['--logfile=v8-%p.log']); } cluster.settings = settings; + + process.on('internalMessage', function(message) { + if (message.cmd !== 'NODE_DEBUG_ENABLED') return; + for (key in cluster.workers) + process._debugProcess(cluster.workers[key].process.pid); + }); + cluster.emit('setup'); }; @@ -107,7 +133,7 @@ function masterInit() { worker.process = fork(settings.exec, settings.args, { env: workerEnv, silent: settings.silent, - execArgv: settings.execArgv + execArgv: createWorkerExecArgv(settings.execArgv, worker) }); worker.process.once('exit', function(exitCode, signalCode) { worker.suicide = !!worker.suicide; |