mirror of
https://github.com/linuxserver/core.git
synced 2026-02-20 05:07:19 +08:00
162 lines
6.2 KiB
JavaScript
162 lines
6.2 KiB
JavaScript
define(function(require, exports, module) {
|
|
main.consumes = ["Plugin", "debugger", "util", "c9", "vfs", "fs"];
|
|
main.provides = ["nodedebugger"];
|
|
return main;
|
|
|
|
function main(options, imports, register) {
|
|
var c9 = imports.c9;
|
|
var vfs = imports.vfs;
|
|
var util = imports.util;
|
|
var Plugin = imports.Plugin;
|
|
var debug = imports.debugger;
|
|
var v8DebuggerPlugin = require("./oldv8debugger")(options, imports);
|
|
var chromeDebuggerPlugin = require("../chrome/chromedebugger")(options, imports);
|
|
|
|
var proxyLauncher = require("../chrome/chrome-debug-proxy-launcher");
|
|
|
|
var dbg, state, process, attached;
|
|
|
|
|
|
/***** Initialization *****/
|
|
|
|
var plugin = new Plugin("Ajax.org", main.consumes);
|
|
var emit = plugin.getEmitter();
|
|
emit.setMaxListeners(1000);
|
|
var eventForwarder;
|
|
var _events = [
|
|
"attach",
|
|
"detach",
|
|
"suspend",
|
|
"setScriptSource",
|
|
"error",
|
|
"getBreakpoints",
|
|
"breakpointUpdate",
|
|
"break",
|
|
"stateChange",
|
|
"exception",
|
|
"frameActivate",
|
|
"getFrames",
|
|
"sources",
|
|
"sourcesCompile"
|
|
];
|
|
|
|
/***** Methods *****/
|
|
|
|
function attach(socket, reconnect, callback) {
|
|
var runner = process.runner;
|
|
proxyLauncher.connect(imports, {
|
|
port: runner.debugport,
|
|
host: runner.debughost,
|
|
sourceDir: c9.sourceDir,
|
|
socket: socket,
|
|
}, function(err, socket) {
|
|
if (err) return callback(err);
|
|
|
|
var newDbg = socket.mode == "v8"
|
|
? v8DebuggerPlugin
|
|
: chromeDebuggerPlugin;
|
|
|
|
if (dbg != newDbg) {
|
|
detach();
|
|
dbg = newDbg;
|
|
}
|
|
|
|
if (eventForwarder)
|
|
eventForwarder.unload();
|
|
eventForwarder = new Plugin();
|
|
eventForwarder.load();
|
|
_events.forEach(function(event) {
|
|
dbg.on(event, function(e) {
|
|
return emit(event, e);
|
|
}, eventForwarder);
|
|
});
|
|
|
|
dbg.attach(socket, reconnect, callback);
|
|
});
|
|
}
|
|
|
|
function detach() {
|
|
if (dbg) {
|
|
dbg.detach();
|
|
dbg = null;
|
|
}
|
|
}
|
|
|
|
/***** Lifecycle *****/
|
|
|
|
plugin.on("load", function() {
|
|
v8DebuggerPlugin.load();
|
|
chromeDebuggerPlugin.load();
|
|
|
|
debug.registerDebugger("v8", plugin);
|
|
debug.registerDebugger("chrome", plugin);
|
|
});
|
|
plugin.on("unload", function() {
|
|
debug.unregisterDebugger("v8", plugin);
|
|
debug.unregisterDebugger("chrome", plugin);
|
|
|
|
v8DebuggerPlugin.unload();
|
|
chromeDebuggerPlugin.unload();
|
|
process = attached = dbg = null;
|
|
eventForwarder.unload();
|
|
eventForwarder = null;
|
|
});
|
|
|
|
/***** Register and define API *****/
|
|
|
|
plugin.freezePublicAPI({
|
|
features: {
|
|
scripts: true,
|
|
conditionalBreakpoints: true,
|
|
liveUpdate: true,
|
|
updateWatchedVariables: true,
|
|
updateScopeVariables: true,
|
|
setBreakBehavior: true,
|
|
executeCode: true
|
|
},
|
|
get type() { dbg ? dbg.type : "" },
|
|
get state() { return dbg ? dbg.state : state; },
|
|
get attached() { return dbg ? dbg.attached : attached; },
|
|
get breakOnExceptions() { return dbg.breakOnExceptions; },
|
|
get breakOnUncaughtExceptions() { return dbg.breakOnUncaughtExceptions; },
|
|
|
|
_events: _events,
|
|
|
|
attach: attach,
|
|
detach: detach,
|
|
|
|
getSources: function() { return dbg.getSources.apply(dbg, arguments); },
|
|
getSource: function() { return dbg.getSource.apply(dbg, arguments); },
|
|
getFrames: function() { return dbg.getFrames.apply(dbg, arguments); },
|
|
getScope: function() { return dbg.getScope.apply(dbg, arguments); },
|
|
getProperties: function() { return dbg.getProperties.apply(dbg, arguments); },
|
|
stepInto: function() { return dbg.stepInto.apply(dbg, arguments); },
|
|
stepOver: function() { return dbg.stepOver.apply(dbg, arguments); },
|
|
stepOut: function() { return dbg.stepOut.apply(dbg, arguments); },
|
|
resume: function() { return dbg.resume.apply(dbg, arguments); },
|
|
suspend: function() { return dbg.suspend.apply(dbg, arguments); },
|
|
evaluate: function() { return dbg.evaluate.apply(dbg, arguments); },
|
|
setScriptSource: function() { return dbg.setScriptSource.apply(dbg, arguments); },
|
|
setBreakpoint: function() { return dbg.setBreakpoint.apply(dbg, arguments); },
|
|
changeBreakpoint: function() { return dbg.changeBreakpoint.apply(dbg, arguments); },
|
|
clearBreakpoint: function() { return dbg.clearBreakpoint.apply(dbg, arguments); },
|
|
listBreakpoints: function() { return dbg.listBreakpoints.apply(dbg, arguments); },
|
|
setVariable: function() { return dbg.setVariable.apply(dbg, arguments); },
|
|
restartFrame: function() { return dbg.restartFrame.apply(dbg, arguments); },
|
|
serializeVariable: function() { return dbg.serializeVariable.apply(dbg, arguments); },
|
|
setBreakBehavior: function() { return dbg.setBreakBehavior.apply(dbg, arguments); },
|
|
getProxySource: function(_process) {
|
|
process = _process;
|
|
return false;
|
|
},
|
|
setPathMap: function() {
|
|
v8DebuggerPlugin.setPathMap.apply(v8DebuggerPlugin, arguments);
|
|
chromeDebuggerPlugin.setPathMap.apply(chromeDebuggerPlugin, arguments);
|
|
},
|
|
});
|
|
|
|
register(null, {
|
|
nodedebugger: plugin
|
|
});
|
|
}
|
|
}); |