Skip to content

Commit

Permalink
jslint and renamed --agent-port to --web-port
Browse files Browse the repository at this point in the history
  • Loading branch information
dannycoates committed Jul 31, 2010
1 parent dc45824 commit 05c6ebb
Show file tree
Hide file tree
Showing 6 changed files with 141 additions and 123 deletions.
51 changes: 29 additions & 22 deletions bin/debugger.js
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -13,13 +13,16 @@ function makeMessage() {
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// exports // exports


exports.attachDebugger = function(port) { exports.attachDebugger = function (port) {
var connected = false; var connected = false,
var buffer = ''; buffer = '',
var msg = false; msg = false,
var conn = net.createConnection(port); conn = net.createConnection(port),
debugr,
offset,
m;
conn.setEncoding('ascii'); conn.setEncoding('ascii');

function parse() { function parse() {
if (msg && msg.headersDone) { if (msg && msg.headersDone) {
//parse body //parse body
Expand All @@ -35,57 +38,61 @@ exports.attachDebugger = function(port) {
} }
return; return;
} }
if (!msg) msg = makeMessage(); if (!msg) {
msg = makeMessage();
}


var offset = buffer.indexOf('\r\n\r\n'); offset = buffer.indexOf('\r\n\r\n');
if (offset > 0) { if (offset > 0) {
msg.headersDone = true; msg.headersDone = true;
msg.headers = buffer.substr(0, offset+4); msg.headers = buffer.substr(0, offset + 4);
var m = /Content-Length: (\d+)/.exec(msg.headers); m = /Content-Length: (\d+)/.exec(msg.headers);
if (m[1]) { if (m[1]) {
msg.contentLength = parseInt(m[1], 10); msg.contentLength = parseInt(m[1], 10);
} }
else { else {
sys.debug('no Content-Length'); sys.debug('no Content-Length');
} }
buffer = buffer.slice(offset+4); buffer = buffer.slice(offset + 4);
parse(); parse();
} }
} }


var debugr = Object.create(events.EventEmitter.prototype, { debugr = Object.create(events.EventEmitter.prototype, {
request: { request: {
value: function(data) value: function (data)
{ {
if (connected) { if (connected) {
var message = 'Content-Length: ' + data.length + '\r\n\r\n' + data; var message = 'Content-Length: ' + data.length + '\r\n\r\n' + data;
conn.write(message); conn.write(message);
} }
}}, }
},
close: { close: {
value: function() value: function ()
{ {
conn.end(); conn.end();
}} }
}); }
});


debugr.__defineGetter__('connected', function() { return connected; }); debugr.__defineGetter__('connected', function () { return connected; });


conn.on('connect', function() { conn.on('connect', function () {
connected = true; connected = true;
debugr.emit('connect'); debugr.emit('connect');
}); });


conn.on('data', function(data) { conn.on('data', function (data) {
buffer += data; buffer += data;
parse(); parse();
}); });


conn.on('end', function() { conn.on('end', function () {
debugr.close(); debugr.close();
}); });


conn.on('close', function() { conn.on('close', function () {
connected = false; connected = false;
debugr.emit('close'); debugr.emit('close');
}); });
Expand Down
41 changes: 21 additions & 20 deletions bin/inspector.js
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -5,27 +5,28 @@ var sys = require('sys'),


var options = {}; var options = {};


process.argv.forEach(function(arg) { process.argv.forEach(function (arg) {
if (arg.indexOf('--') > -1) { if (arg.indexOf('--') > -1) {
var parts = arg.split('='); var parts = arg.split('=');
if (parts.length > 1) { if (parts.length > 1) {
switch(parts[0]) { switch (parts[0]) {
case '--start': case '--start':
options.file = parts[1]; options.file = parts[1];
break; break;
case '--start-brk': case '--start-brk':
options.file = parts[1]; options.file = parts[1];
options.brk = true; options.brk = true;
break; break;
case '--agent-port': case '--web-port':
options.webPort = parseInt(parts[1], 10); case '--agent-port':
break; options.webPort = parseInt(parts[1], 10);
case '--debug-port': break;
options.debugPort = parseInt(parts[1], 10); case '--debug-port':
break; options.debugPort = parseInt(parts[1], 10);
default: break;
console.log('unknown option: ' + parts[0]); default:
break; console.log('unknown option: ' + parts[0]);
break;
} }
} }
else if (parts[0] === '--fwd-io') { else if (parts[0] === '--fwd-io') {
Expand All @@ -40,7 +41,7 @@ process.argv.forEach(function(arg) {
console.log('--start=[file] starts [file] in a child process with node_g --debug'); console.log('--start=[file] starts [file] in a child process with node_g --debug');
console.log(' [file] path can be absolute or relative to $PWD'); console.log(' [file] path can be absolute or relative to $PWD');
console.log('--start-brk=[file] same as start with --debug-brk'); console.log('--start-brk=[file] same as start with --debug-brk');
console.log('--agent-port=[port] port to host the inspector (default 8080)'); console.log('--web-port=[port] port to host the inspector (default 8080)');
console.log('--debug-port=[port] v8 debug port to connect to (default 5858)'); console.log('--debug-port=[port] v8 debug port to connect to (default 5858)');
console.log('--fwd-io forward stdout and stderr from the child process to inspector console'); console.log('--fwd-io forward stdout and stderr from the child process to inspector console');
process.exit(); process.exit();
Expand All @@ -50,7 +51,7 @@ process.argv.forEach(function(arg) {


var ds = session.createSession(options); var ds = session.createSession(options);


ds.on('close', function() { ds.on('close', function () {
console.log('session closed'); console.log('session closed');
process.exit(); process.exit();
}); });
Expand Down
126 changes: 70 additions & 56 deletions bin/session.js
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ var WEBROOT = path.join(path.dirname(__filename), '../front-end');
function staticFile(req, res) { function staticFile(req, res) {
paperboy paperboy
.deliver(WEBROOT, req, res) .deliver(WEBROOT, req, res)
.error(function(statCode,msg) { .error(function (statCode, msg) {
res.writeHead(statCode, {'Content-Type': 'text/plain'}); res.writeHead(statCode, {'Content-Type': 'text/plain'});
res.end("Error: " + statCode); res.end("Error: " + statCode);
}) })
.otherwise(function(err) { .otherwise(function (err) {
var statCode = 404; var statCode = 404;
res.writeHead(statCode, {'Content-Type': 'text/plain'}); res.writeHead(statCode, {'Content-Type': 'text/plain'});
res.end(); res.end();
Expand All @@ -25,7 +25,7 @@ function staticFile(req, res) {


function override(options, defaults) { function override(options, defaults) {
var result = {}; var result = {};
Object.keys(defaults).forEach(function(key) { Object.keys(defaults).forEach(function (key) {
result[key] = options[key] || defaults[key]; result[key] = options[key] || defaults[key];
}); });
return result; return result;
Expand All @@ -34,50 +34,54 @@ function override(options, defaults) {
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// exports // exports


exports.createSession = function(options) { exports.createSession = function (options) {
var defaults = { var defaults = {
debugPort: 5858, debugPort: 5858,
webPort: 8080, webPort: 8080,
fwdio: false, fwdio: false,
brk: false, brk: false,
file: null file: null
}; },
var settings = override(options || {}, defaults); settings = override(options || {}, defaults),
var httpServer = http.createServer(staticFile); httpServer = http.createServer(staticFile),
var wsServer = ws.createServer(null, httpServer); wsServer = ws.createServer(null, httpServer),
var debug = null; debug = null,
var breakpoints = {}; breakpoints = {},
var pending = {}; pending = {},
var direct = ['scripts', direct = ['scripts',
'scope', 'scope',
'lookup', 'lookup',
'evaluate', 'evaluate',
'backtrace', 'backtrace',
'listbreakpoints']; 'listbreakpoints'],
flag = '--debug=',
proc,
sendIo,
session;


function breakpointReturnFilter(msg) { function breakpointReturnFilter(msg) {
switch (msg.command) { switch (msg.command) {
case 'setbreakpoint': case 'setbreakpoint':
case 'clearbreakpoint': case 'clearbreakpoint':
case 'changebreakpoint': case 'changebreakpoint':
msg.arguments = breakpoints[msg.request_seq]; msg.arguments = breakpoints[msg.request_seq];
delete breakpoints[msg.request_seq]; delete breakpoints[msg.request_seq];
break; break;
default: default:
break; break;
} }
return msg; return msg;
} }


function breakpointRequestFilter(msg) { function breakpointRequestFilter(msg) {
switch (msg.command) { switch (msg.command) {
case 'setbreakpoint': case 'setbreakpoint':
case 'clearbreakpoint': case 'clearbreakpoint':
case 'changebreakpoint': case 'changebreakpoint':
breakpoints[msg.seq] = msg.arguments; breakpoints[msg.seq] = msg.arguments;
break; break;
default: default:
break; break;
} }
return msg; return msg;
} }
Expand All @@ -100,8 +104,9 @@ exports.createSession = function(options) {
} }


function handleMessage(msg) { function handleMessage(msg) {
var conn, bmsg;
if (msg.type === 'response' && direct.indexOf(msg.command) > -1) { if (msg.type === 'response' && direct.indexOf(msg.command) > -1) {
var conn = getConnection(msg); conn = getConnection(msg);
if (conn) { if (conn) {
conn.write(JSON.stringify(msg)); conn.write(JSON.stringify(msg));
} }
Expand All @@ -110,78 +115,87 @@ exports.createSession = function(options) {
} }
} }
else { else {
var bmsg = breakpointReturnFilter(msg); bmsg = breakpointReturnFilter(msg);
wsServer.broadcast(JSON.stringify(bmsg)); wsServer.broadcast(JSON.stringify(bmsg));
} }
} }


wsServer.on('connection', function(conn) { wsServer.on('connection', function (conn) {
if (!debug) { if (!debug) {
// first connection // first connection
debug = debugr.attachDebugger(settings.debugPort); debug = debugr.attachDebugger(settings.debugPort);
debug.on('data', function(msg) { debug.on('data', function (msg) {
handleMessage(msg); handleMessage(msg);
}); });
debug.on('close', function() { debug.on('close', function () {
debug = null; debug = null;
session.close(); session.close();
}); });
} }
conn.on('message', function(data) { conn.on('message', function (data) {
handleRequest(conn, data); handleRequest(conn, data);
}); });
session.emit('connection', conn); session.emit('connection', conn);
}); });


if (settings.file) { if (settings.file) {
var flag = '--debug='; if (options.brk) {
if (options.brk) flag = '--debug-brk='; flag = '--debug-brk=';
}
flag += settings.debugPort; flag += settings.debugPort;
if (options.profile) { if (options.profile) {
var proc = spawn('node_g', [flag, '--prof', '--prof_lazy', settings.file]); proc = spawn('node_g', [flag, '--prof', '--prof_lazy', settings.file]);
} }
else { else {
var proc = spawn('node_g', [flag, settings.file]); proc = spawn('node_g', [flag, settings.file]);
} }
proc.on('exit', function(code, signal) { proc.on('exit', function (code, signal) {
proc = null; proc = null;
console.log('proc exited with code: ' + code + ' signal: ' + signal); console.log('proc exited with code: ' + code + ' signal: ' + signal);
}); });
if (settings.fwdio) { if (settings.fwdio) {
function sendIo(event, data) { sendIo = function (event, data) {
wsServer.broadcast(JSON.stringify({ wsServer.broadcast(JSON.stringify({
seq: 0, seq: 0,
type: 'event', type: 'event',
event: event, event: event,
body: data body: data
})); }));
} };
proc.stdout.setEncoding('utf8'); proc.stdout.setEncoding('utf8');
proc.stdout.on('data', function(data) { proc.stdout.on('data', function (data) {
sys.print(data); sys.print(data);
sendIo('stdout', data); sendIo('stdout', data);
}); });


proc.stderr.setEncoding('utf8'); proc.stderr.setEncoding('utf8');
proc.stderr.on('data', function(data) { proc.stderr.on('data', function (data) {
console.error(data); console.error(data);
sendIo('stderr', data); sendIo('stderr', data);
}); });
} }
} }
wsServer.listen(settings.webPort); wsServer.listen(settings.webPort);


var session = Object.create(events.EventEmitter.prototype, { session = Object.create(events.EventEmitter.prototype, {
close: { close: {
value: function() value: function ()
{ {
if (proc) proc.kill(); if (proc) {
if (debug && debug.connected) debug.close(); proc.kill();
if (wsServer) wsServer.close(); }
if (debug && debug.connected) {
debug.close();
}
if (wsServer) {
wsServer.close();
}
session.emit('close'); session.emit('close');
}}}); }
session.__defineGetter__('webPort', function() { return settings.webPort; }); }
session.__defineGetter__('debugPort', function() { return settings.debugPort; }); });
session.__defineGetter__('webPort', function () { return settings.webPort; });
session.__defineGetter__('debugPort', function () { return settings.debugPort; });


return session; return session;
}; };
Loading

0 comments on commit 05c6ebb

Please sign in to comment.