Browse Source

Expose the V8 debug object process.debug

Add one duplicate test from V8, just to make sure it works.
v0.7.4-release
Ryan Dahl 14 years ago
parent
commit
d9fbb8a580
  1. 4
      lib/module.js
  2. 22
      src/node.cc
  3. 3
      src/node.js
  4. 27
      test/simple/test-liveedit.js

4
lib/module.js

@ -420,8 +420,8 @@ Module.prototype._compile = function (content, filename) {
+ "\n});";
var compiledWrapper = process.compile(wrapper, filename);
if (filename === process.argv[1] && global.v8debug) {
global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0);
if (filename === process.argv[1] && process._debugWaitConnect) {
process.debug.setBreakPoint(compiledWrapper, 0, 0);
}
compiledWrapper.apply(self.exports, [self.exports, require, self, filename, dirname]);
} else {

22
src/node.cc

@ -1631,6 +1631,9 @@ static void Load(int argc, char *argv[]) {
// who do not like how 'src/node.js' setups the module system but do like
// Node's I/O bindings may want to replace 'f' with their own function.
process->Set(String::NewSymbol("_debugWaitConnect"),
node::debug_wait_connect ? True() : False());
Local<Value> args[1] = { Local<Value>::New(process) };
f->Call(global, 1, args);
@ -1741,16 +1744,15 @@ int main(int argc, char *argv[]) {
int v8argc = node::option_end_index;
char **v8argv = argv;
if (node::debug_wait_connect) {
// v8argv is a copy of argv up to the script file argument +2 if --debug-brk
// to expose the v8 debugger js object so that module.js can set
// a breakpoint on the first line of the startup script
v8argc += 2;
v8argv = new char*[v8argc];
memcpy(v8argv, argv, sizeof(argv) * node::option_end_index);
v8argv[node::option_end_index] = const_cast<char*>("--expose_debug_as");
v8argv[node::option_end_index + 1] = const_cast<char*>("v8debug");
}
// v8argv is a copy of argv up to the script file argument +2
// to expose the v8 debugger js object so that module.js can set
// a breakpoint on the first line of the startup script
v8argc += 2;
v8argv = new char*[v8argc];
memcpy(v8argv, argv, sizeof(argv) * node::option_end_index);
v8argv[node::option_end_index] = const_cast<char*>("--expose_debug_as");
v8argv[node::option_end_index + 1] = const_cast<char*>("v8debug");
V8::SetFlagsFromCommandLine(&v8argc, v8argv, false);
// Ignore SIGPIPE

3
src/node.js

@ -233,6 +233,9 @@ global.console.assert = function(expression){
global.Buffer = module.requireNative('buffer').Buffer;
process.debug = global.v8debug.Debug;
global.v8debug = undefined;
process.exit = function (code) {
process.emit("exit");
process.reallyExit(code);

27
test/simple/test-liveedit.js

@ -0,0 +1,27 @@
common = require("../common");
assert = require("assert");
// This is a duplicate of deps/v8/test/mjsunit/debug-liveedit-1.js
// Just exercises the process.debug object.
eval("var something1 = 25; "
+ " function ChooseAnimal() { return 'Cat'; } "
+ " ChooseAnimal.Helper = function() { return 'Help!'; }");
assert.equal("Cat", ChooseAnimal());
var script = process.debug.findScript(ChooseAnimal);
var orig_animal = "Cat";
var patch_pos = script.source.indexOf(orig_animal);
var new_animal_patch = "Cap' + 'y' + 'bara";
var change_log = new Array();
process.debug.LiveEdit.TestApi.ApplySingleChunkPatch(script,
patch_pos,
orig_animal.length,
new_animal_patch,
change_log);
assert.equal("Capybara", ChooseAnimal());
Loading…
Cancel
Save