oha*_*nho 7 javascript sandbox node.js node-inspector
我在node.js做我的宝贝步骤,我正在尝试理解沙盒机制.
目前我使用的是节点v4.0.0和node-inspector v0.12.3.
我已经安装了gf3/sandbox模块并使用这个简单的代码运行它:
var s = new Sandbox();
s.run('1 + 1 + " apples"',function(output) {
console.log(output.result);
});
Run Code Online (Sandbox Code Playgroud)
为了便于调试,我还在sandbox.js文件中注释了超时功能:
// timer = setTimeout(function() {
// self.child.stdout.removeListener('output', output);
// stdout = JSON.stringify({ result: 'TimeoutError', console: [] });
// self.child.kill('SIGKILL');
// }, self.options.timeout);
Run Code Online (Sandbox Code Playgroud)
问题是调试不会破坏任何行代码shovel.js,并且我100%确定模块正在使用其代码.
这是为什么 ?我可以做些什么来调试shovel.js?
sandbox.js在没有启用调试的情况下作为子进程生成shovel.js(例如没有--debug选项)。因此子进程正常执行,并且您的断点将被忽略。您还需要在调试模式下启动子进程。
如果您想同时调试两者,请使用不同的调试端口sandbox.js。shovel.js我不确定节点检查器,但这里是如何使用调试器模块执行此操作的示例。我确信您可以稍微调整一下以使其与节点检查器一起使用。
在 中生成子进程时传递调试选项sandbox.js。请注意端口是5859:
self.child = spawn(this.options.node, ['--debug-brk=5859',this.options.shovel], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] });
Run Code Online (Sandbox Code Playgroud)example.js以调试模式启动。默认情况下,它从端口启动5858:
node --debug-brk example.js
Run Code Online (Sandbox Code Playgroud)现在sandbox.js通过连接到进行调试5858:
node debug localhost:5858
Run Code Online (Sandbox Code Playgroud)子进程启动后,您可以启动单独的终端并开始shovel.js在端口上进行调试5859:
node debug localhost:5859
Run Code Online (Sandbox Code Playgroud)对于节点检查器,我认为您需要使用node-debug命令而不是this.options.node子进程。还有一些选项可以显式设置调试端口。
从上面来看,这些可能是 的步骤node-inspector。注意:我还没有测试过:
打开sandbox.js文件并更改此行,如下所示,以在生成子进程时传递调试选项。请注意端口是5859:
self.child = spawn('node-debug', ['--debug-port=5859',this.options.shovel], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] });
Run Code Online (Sandbox Code Playgroud)example.js以调试模式启动。默认情况下,它从端口启动5858:
node-debug example.js
Run Code Online (Sandbox Code Playgroud)现在前往浏览器调试父进程:
http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858
子进程启动后,打开另一个浏览器窗口进行调试shovel.js:
http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5859