我正在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?
发布于 2015-10-16 15:49:50
sandbox.js是作为子过程,没有启用调试(例如,没有--debug选项)。因此,子进程将正常执行,您的断点将被忽略。您也需要在调试模式下启动子进程。
如果希望同时调试sandbox.js和shovel.js,则使用不同的调试端口。我不确定节点检查器,但是这里有一个例子说明如何使用调试器模块来完成这个任务。我相信你可以稍微调整一下,让它与节点检查器一起工作。
sandbox.js中生成子进程时,通过调试选项。注意,端口是5859:
self.child =生成(this.options.node,‘-debug-brk=5859’,this.options.shovel,{ stdio:'pipe','ipc‘});example.js。默认情况下,它从5858端口启动:
节点--调试-brk example.jssandbox.js来调试5858:
节点调试本地主机:5858shovel.js上调试5859:
节点调试本地主机:5859对于节点检查器,我认为您需要对子进程使用node-debug命令而不是this.options.node命令。还可以使用有一些选择显式设置调试端口。
从上面看,这可能是node-inspector的步骤。注意:我还没有测试过
sandbox.js文件并更改这条线,如下所示,在生成子进程时传递调试选项。注意,端口是5859:
self.child =派生(“节点-调试”,“-调试-端口=5859”,this.options.shovel,{ stdio:“管道”,“ipc”});example.js。默认情况下,它从5858端口启动:
节点调试example.jshttp://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858shovel.js:
http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5859https://stackoverflow.com/questions/32710542
复制相似问题