From 9a8f18613da4956c963377e2ad55cdd3dabc32aa Mon Sep 17 00:00:00 2001 From: Zach Bruggeman Date: Wed, 4 Feb 2015 19:03:18 -0800 Subject: [PATCH] child_process: add debug and error details This commit adds debug() calls to spawn() and spawnSync(), and attaches additional information to Error objects. Fixes: https://github.com/iojs/io.js/issues/720 PR-URL: https://github.com/iojs/io.js/pull/721 Reviewed-By: Colin Ihrig Reviewed-By: Trevor Norris --- lib/child_process.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/child_process.js b/lib/child_process.js index a7587d0ac564ef..5fcd2603940d6d 100644 --- a/lib/child_process.js +++ b/lib/child_process.js @@ -6,6 +6,7 @@ const net = require('net'); const dgram = require('dgram'); const assert = require('assert'); const util = require('util'); +const debug = util.debuglog('child_process'); const Process = process.binding('process_wrap').Process; const WriteWrap = process.binding('stream_wrap').WriteWrap; @@ -958,6 +959,8 @@ var spawn = exports.spawn = function(/*file, args, options*/) { var options = opts.options; var child = new ChildProcess(); + debug('spawn', opts.args, options); + child.spawn({ file: opts.file, args: opts.args, @@ -1035,6 +1038,7 @@ function ChildProcess() { if (self.spawnfile) err.path = self.spawnfile; + err.spawnargs = self.spawnargs.slice(1); self.emit('error', err); } else { self.emit('exit', self.exitCode, self.signalCode); @@ -1097,6 +1101,7 @@ ChildProcess.prototype.spawn = function(options) { } this.spawnfile = options.file; + this.spawnargs = options.args; var err = this._handle.spawn(options); @@ -1242,6 +1247,8 @@ function spawnSync(/*file, args, options*/) { var i; + debug('spawnSync', opts.args, options); + options.file = opts.file; options.args = opts.args; options.envPairs = opts.envPairs; @@ -1289,8 +1296,11 @@ function spawnSync(/*file, args, options*/) { result.stdout = result.output && result.output[1]; result.stderr = result.output && result.output[2]; - if (result.error) - result.error = errnoException(result.error, 'spawnSync'); + if (result.error) { + result.error = errnoException(result.error, 'spawnSync ' + opts.file); + result.error.path = opts.file; + result.error.spawnargs = opts.args.slice(1); + } util._extend(result, opts);