调试gf3 /沙箱模块

我正在做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);
        });

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

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

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

这是为什么 ? 我能做些什么来调试shovel.js


sandbox.js产生shovel.js作为子进程而不启用调试(例如,没有--debug选项)。 因此,子进程正常执行,您的断点将被忽略。 您还需要在调试模式下启动子进程。

如果您想同时调试sandbox.jsshovel.js ,请使用不同的调试端口。 我不确定节点检查器,但这里是一个如何使用调试器模块执行的例子。 我相信你可以稍微调整一下,使它与节点检查器一起工作。

  • 像你已经做过的那样评论超时代码
  • sandbox.js产生子进程时传递调试选项。 注意端口是5859

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

    node --debug-brk example.js
    
  • 现在通过连接到5858来调试sandbox.js

    node debug localhost:5858
    
  • 一旦子进程启动,您可以启动单独的终端并开始在端口5859上调试shovel.js

     node debug localhost:5859
    
  • 对于节点检查器,我认为你需要使用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'] });    
    
  • 在调试模式下启动example.js 。 默认情况下,它始于5858端口:

    node-debug example.js
    
  • 现在前往浏览器调试父进程:

    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

  • 链接地址: http://www.djcxy.com/p/29245.html

    上一篇: Debugging gf3/sandbox module

    下一篇: Why is namespace std not required for legacy C identifiers?