debugginggf3 /沙箱模块

我在做node.js中的宝贝步骤,我正在试着了解沙箱机制。

目前我正在使用节点v4.0.0和节点检查员v0.12.3。

我已经安装了gf3 / sandbox模块,并运行这个简单的代码:

var s = new Sandbox(); s.run('1 + 1 + " apples"',function(output) { console.log(output.result); }); 

为了容易debugging,我还评论了sandbox.js文件中的超时函数:

 // timer = setTimeout(function() { // self.child.stdout.removeListener('output', output); // stdout = JSON.stringify({ result: 'TimeoutError', console: [] }); // self.child.kill('SIGKILL'); // }, self.options.timeout); 

问题是,debugging不会破坏shovel.js任何行代码,并且我100%确定模块正在使用它的代码。

这是为什么 ? 我能做些什么来debuggingshovel.js

sandbox.js 产生shovel.js作为subprocess没有debugging启用(例如没有 – debugging选项)。 所以subprocess正常执行,你的断点就被忽略了。 您也需要在debugging模式下启动subprocess。

如果要同时debuggingsandbox.jsshovel.js ,则使用不同的debugging端口。 我不清楚节点检查器,但是这里是一个如何使用debugging器模块来做的例子。 我相信你可以调整一下,使其与节点检查工作。

  1. 像你已经做的那样评论超时代码
  2. sandbox.js产生subprocess时传递debugging选项。 注意端口是5859

     self.child = spawn(this.options.node, ['--debug-brk=5859',this.options.shovel], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] }); 
  3. 在debugging模式下启动example.js 。 默认情况下,它始于5858端口:

     node --debug-brk example.js 
  4. 现在通过连接到5858来debuggingsandbox.js

     node debug localhost:5858 
  5. 一旦subprocess启动,您可以启动单独的terminal并开始在端口5859上debuggingshovel.js

      node debug localhost:5859 

对于节点检查器,我认为你需要使用node-debug命令而不是this.options.node来进行subprocess。 也有显式设置debugging端口的选项 。


从上面这些可能是node-inspector的步骤。 注意:我没有testing过它

  1. 同上
  2. 打开sandbox.js文件并更改此行 ,如下所示,以便在产生subprocess时传递debugging选项。 注意端口是5859

     self.child = spawn('node-debug', ['--debug-port=5859',this.options.shovel], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] }); 
  3. 在debugging模式下启动example.js 。 默认情况下,它始于5858端口:

     node-debug example.js 
  4. 现在前往浏览器debugging父进程:

    http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858

  5. 一旦subprocess启动,打开另一个浏览器窗口来debuggingshovel.js

    http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5859