调试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.js
和shovel.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
上一篇: Debugging gf3/sandbox module
下一篇: Why is namespace std not required for legacy C identifiers?