2015-09-22 106 views
7

我正在做我的寶貝在node.js中的步驟,我想了解沙箱機制。調試gf3 /沙箱模塊

目前我使用節點v4.0.0和節點檢查器v0.12.3。

我已經安裝了GF3 /沙箱模塊,並用這個簡單的代碼運行:

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

回答

3

sandbox.jsspawning shovel.js as child process未啓用調試(例如,沒有--debug選項)。因此,子進程正常執行,您的斷點將被忽略。您還需要在調試模式下啓動子進程。

如果您想要同時調試sandbox.jsshovel.js,請使用不同的調試端口。我不確定節點檢查器,但這裏是一個如何使用調試器模塊執行的例子。我相信你可以稍微調整一下,使它與節點檢查器一起工作。

  1. 評論像你超時代碼已經做了
  2. 通行證調試選項,而產卵子進程sandbox.js。注意端口是5859

    self.child = spawn(this.options.node, ['--debug-brk=5859',this.options.shovel], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] });  
    
  3. 開始example.js在調試模式。默認情況下,它開始於5858端口:

    node --debug-brk example.js 
    
  4. 現在通過連接調試sandbox.js5858

    node debug localhost:5858 
    
  5. 一旦子進程啓動後,你可以啓動獨立的終端,並開始調試shovel.js端口5859

    node debug localhost:5859 
    

對於節點檢查員,我認爲您需要使用node-debug命令而不是this.options.node來執行子進程。另外there are options明確設置調試端口。


從上面,這些可能是node-inspector的步驟。注:我沒有測試它

  1. 同上
  2. 打開sandbox.js文件並更改this line像下面通過調試選項,而產卵子進程。注意端口是5859

    self.child = spawn('node-debug', ['--debug-port=5859',this.options.shovel], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] });  
    
  3. 開始example.js在調試模式。默認情況下,它開始於5858端口:

    node-debug example.js 
    
  4. 現在前往瀏覽器調試父進程:

    http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858

  5. 孩子一旦進程啓動,打開另一個瀏覽器窗口調試shovel.js

    http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5859

+0

嗨, 感謝您的詳細解答。 1.我應該在哪裏放這條線: self.child = spawn(this.options.node,['--debug-brk = 5859',this.options.shovel],{stdio:['pipe', 'pipe','pipe','ipc']}); 2.什麼是「debug-brk」?爲什麼不使用「調試」? 3.在第4節和第5節中,您的意思是「節點調試」而不是「節點調試」? 謝謝。 – ohadinho

+0

1.檢查我的答案中的第一個鏈接。 2,3:我的回答是內置['debugger'](https://nodejs.org/api/debugger.html)模塊。這就是爲什麼'--debug-brk'。對於'node-inspector',你需要使用它自己的命令和參數,但步驟是一樣的。我在Windows上,無法測試,因爲'node-inspector'在Window上播放不好。 – hassansin

+0

爲節點檢查員添加了未經測試的步驟。讓我知道它是否有效。 – hassansin