debug client: connect after child is ready

We now wait to connect to the debuggee until we know that
its error stream has data, to ensure that the output message
"connecting..... ok" appears after "Debugger listening on port xyz"

I also increased the test timeout to let the more complex
tests finish in time on Windows

This change fixes the following unit tests on Windows:
 test-debugger-repl.js
 test-debugger-repl-term.js
 test-debugger-repl-utf8.js
 test-debugger-repl-restart.js
This commit is contained in:
Alexis Campailla 2013-12-06 08:58:15 -08:00 committed by Timothy J Fontaine
parent 574f71444c
commit e12e72eb58
2 changed files with 12 additions and 10 deletions

View File

@ -25,6 +25,7 @@ var util = require('util'),
vm = require('vm'),
repl = require('repl'),
inherits = util.inherits,
assert = require('assert'),
spawn = require('child_process').spawn;
exports.start = function(argv, stdin, stdout) {
@ -1612,6 +1613,7 @@ Interface.prototype.trySpawn = function(cb) {
childArgs = this.args;
this.killChild();
assert(!this.child);
if (this.args.length === 2) {
var match = this.args[1].match(/^([^:]+):(\d+)$/);
@ -1647,12 +1649,10 @@ Interface.prototype.trySpawn = function(cb) {
}
}
if (!this.child) {
this.child = spawn(process.execPath, childArgs);
this.child = spawn(process.execPath, childArgs);
this.child.stdout.on('data', this.childPrint.bind(this));
this.child.stderr.on('data', this.childPrint.bind(this));
}
this.child.stdout.on('data', this.childPrint.bind(this));
this.child.stderr.on('data', this.childPrint.bind(this));
this.pause();
@ -1709,8 +1709,10 @@ Interface.prototype.trySpawn = function(cb) {
client.connect(port, host);
}
setTimeout(function() {
self.print('connecting to port ' + port + '..', true);
attemptConnect();
}, 50);
this.child.stderr.once('data', function() {
setImmediate(function() {
self.print('connecting to port ' + port + '..', true);
attemptConnect();
});
});
};

View File

@ -91,7 +91,7 @@ function startDebugger(scriptToDebug) {
});
quit();
}, 5000).unref();
}, 10000).unref();
process.once('uncaughtException', function(e) {
console.error('UncaughtException', e, e.stack);