首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试GF3/沙箱模块

调试GF3/沙箱模块
EN

Stack Overflow用户
提问于 2015-09-22 07:10:54
回答 1查看 256关注 0票数 7

我正在node.js中做我的初步步骤,我正在尝试理解沙箱机制。

目前,我使用的是节点v4.0.0和节点检查器v0.12.3。

我已经安装了gf3/sandbox模块,并使用以下简单代码运行它:

代码语言:javascript
复制
var s = new Sandbox();
s.run('1 + 1 + " apples"',function(output) {
                console.log(output.result);
        });

为了便于调试,我还在sandbox.js文件中注释了超时函数:

代码语言:javascript
复制
// 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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-16 15:49:50

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

如果希望同时调试sandbox.jsshovel.js,则使用不同的调试端口。我不确定节点检查器,但是这里有一个例子说明如何使用调试器模块来完成这个任务。我相信你可以稍微调整一下,让它与节点检查器一起工作。

  1. 注释超时代码,就像您已经做的那样
  2. sandbox.js中生成子进程时,通过调试选项。注意,端口是5859: self.child =生成(this.options.node,‘-debug-brk=5859’,this.options.shovel,{ stdio:'pipe','ipc‘});
  3. 在调试模式下启动example.js。默认情况下,它从5858端口启动: 节点--调试-brk example.js
  4. 现在通过连接到sandbox.js来调试5858: 节点调试本地主机:5858
  5. 子进程启动后,可以启动单独的终端,并开始在端口shovel.js上调试5859: 节点调试本地主机:5859

对于节点检查器,我认为您需要对子进程使用node-debug命令而不是this.options.node命令。还可以使用有一些选择显式设置调试端口。

从上面看,这可能是node-inspector的步骤。注意:我还没有测试过

  1. 与上述相同
  2. 打开sandbox.js文件并更改这条线,如下所示,在生成子进程时传递调试选项。注意,端口是5859: self.child =派生(“节点-调试”,“-调试-端口=5859”,this.options.shovel,{ stdio:“管道”,“ipc”});
  3. 在调试模式下启动example.js。默认情况下,它从5858端口启动: 节点调试example.js
  4. 现在转到浏览器来调试父进程: http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858
  5. 子进程启动后,打开另一个浏览器窗口来调试shovel.jshttp://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5859
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32710542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档