Browse Source

debugger: add 'kill' command

v0.7.4-release
Ryan Dahl 14 years ago
parent
commit
866201bd74
  1. 58
      lib/_debugger.js

58
lib/_debugger.js

@ -278,7 +278,8 @@ Client.prototype.step = function(action, count, cb) {
var helpMessage = "Commands: run, print, step, next, continue, scripts, backtrace, version, quit";
var helpMessage = "Commands: run, kill, print, step, next, " +
"continue, scripts, backtrace, version, quit";
function SourceUnderline(sourceText, position) {
if (!sourceText) return;
@ -420,10 +421,15 @@ Interface.prototype.handleCommand = function(cmd) {
if (self.child) {
self.restartQuestion(function (yes) {
if (!yes) {
self._lastCommand = null;
term.prompt();
} else {
console.log("restarting...");
self.trySpawn();
self.killChild();
// XXX need to wait a little bit for the restart to work?
setTimeout(function () {
self.trySpawn();
}, 1000);
}
});
} else {
@ -488,9 +494,22 @@ Interface.prototype.handleCommand = function(cmd) {
self.printNotConnected();
return;
}
client.reqContinue(function (res) {
// Wait for break point. (disable raw mode?)
});
client.reqContinue();
} else if (/^k(ill)?/.test(cmd)) {
// kill
if (self.child) {
self.killQuestion(function (yes) {
if (yes) {
self.killChild();
} else {
self._lastCommand = null;
}
self.term.prompt();
});
} else {
self.term.prompt();
}
} else if (/^next/.test(cmd) || /^n/.test(cmd)) {
if (!client) {
@ -541,13 +560,10 @@ Interface.prototype.handleCommand = function(cmd) {
};
var restartQuestionPrompt = "The program being debugged has " +
"been started already.\n" +
"Start it from the beginning? (y or n): ";
Interface.prototype.restartQuestion = function(cb) {
Interface.prototype.yesNoQuestion = function(prompt, cb) {
var self = this;
this.term.question(restartQuestionPrompt, function (answer) {
this.term.question(prompt, function (answer) {
if (/^y(es)?$/i.test(answer)) {
cb(true);
} else if (/^n(o)?$/i.test(answer)) {
@ -560,16 +576,27 @@ Interface.prototype.restartQuestion = function(cb) {
};
Interface.prototype.killChild = function() {
if (this.client) {
this.client.destroy();
this.client = null;
}
Interface.prototype.restartQuestion = function(cb) {
this.yesNoQuestion("The program being debugged has been started already.\n" +
"Start it from the beginning? (y or n) ", cb);
};
Interface.prototype.killQuestion = function(cb) {
this.yesNoQuestion("Kill the program being debugged? (y or n) ", cb);
};
Interface.prototype.killChild = function() {
if (this.child) {
this.child.kill();
this.child = null;
}
if (this.client) {
this.client.destroy();
this.client = null;
}
};
@ -598,7 +625,6 @@ Interface.prototype.trySpawn = function(cb) {
console.log("\nprogram terminated");
self.client = null;
self.killChild();
self.term.prompt();
});
client.on('unhandledResponse', function (res) {

Loading…
Cancel
Save