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.js
和shovel.js
,则使用不同的debugging端口。 我不清楚节点检查器,但是这里是一个如何使用debugging器模块来做的例子。 我相信你可以调整一下,使其与节点检查工作。
- 像你已经做的那样评论超时代码
-
在
sandbox.js
产生subprocess时传递debugging选项。 注意端口是5859
:self.child = spawn(this.options.node, ['--debug-brk=5859',this.options.shovel], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] });
-
在debugging模式下启动
example.js
。 默认情况下,它始于5858
端口:node --debug-brk example.js
-
现在通过连接到
5858
来debuggingsandbox.js
:node debug localhost:5858
-
一旦subprocess启动,您可以启动单独的terminal并开始在端口
5859
上debuggingshovel.js
:node debug localhost:5859
对于节点检查器,我认为你需要使用node-debug
命令而不是this.options.node
来进行subprocess。 也有显式设置debugging端口的选项 。
从上面这些可能是node-inspector
的步骤。 注意:我没有testing过它 :
- 同上
-
打开
sandbox.js
文件并更改此行 ,如下所示,以便在产生subprocess时传递debugging选项。 注意端口是5859
:self.child = spawn('node-debug', ['--debug-port=5859',this.options.shovel], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] });
-
在debugging模式下启动
example.js
。 默认情况下,它始于5858
端口:node-debug example.js
-
现在前往浏览器debugging父进程:
http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858
-
一旦subprocess启动,打开另一个浏览器窗口来debugging
shovel.js
:http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5859