Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Expose the V8 debug object process.debug
Browse files Browse the repository at this point in the history
Add one duplicate test from V8, just to make sure it works.
  • Loading branch information
ry committed Aug 2, 2010
1 parent 3214116 commit d9fbb8a
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 12 deletions.
4 changes: 2 additions & 2 deletions lib/module.js
Expand Up @@ -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 {
Expand Down
22 changes: 12 additions & 10 deletions src/node.cc
Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions src/node.js
Expand Up @@ -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);
Expand Down
27 changes: 27 additions & 0 deletions 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());

0 comments on commit d9fbb8a

Please sign in to comment.