2015-09-22 13 views
7

Sto facendo i miei piccoli passi su node.js e sto cercando di capire il meccanismo sandbox.Debug di modulo gf3/sandbox

Attualmente sto usando il nodo v4.0.0 e node-inspector v0.12.3.

Ho installato il modulo GF3/sandbox ed eseguirlo con questo semplice codice:

var s = new Sandbox(); 
s.run('1 + 1 + " apples"',function(output) { 
       console.log(output.result); 
     }); 

Al fine di eseguire il debug facile, ho anche commentato la funzione di timeout in sandbox.js di file:

// timer = setTimeout(function() { 
    // self.child.stdout.removeListener('output', output); 
    // stdout = JSON.stringify({ result: 'TimeoutError', console: [] }); 
    // self.child.kill('SIGKILL'); 
    // }, self.options.timeout); 

Il problema è che il debug NON si interrompe su QUALSIASI codice di linea di shovel.js e sono sicuro al 100% che il modulo stia utilizzando il suo codice.

Perché è quello? E cosa posso fare per eseguire il debug di shovel.js?

risposta

3

sandbox.js è spawning shovel.js as child process senza debug abilitato (ad esempio senza l'opzione --debug). Quindi il processo figlio viene eseguito normalmente e i punti di interruzione vengono semplicemente ignorati. È necessario avviare il processo figlio anche in modalità di debug.

Se si desidera eseguire il debug di entrambi sandbox.js e shovel.js allo stesso tempo, quindi utilizzare diverse porte di debug. Non sono sicuro di node-inspector, ma ecco un esempio di come puoi farlo con il modulo debugger. Sono sicuro che puoi modificare un po 'per farlo funzionare con node-inspector.

  1. Commento il codice di timeout, come già fatto
  2. opzione di debug passo, mentre la deposizione delle uova processo figlio in sandbox.js. Si noti la porta è 5859:

    self.child = spawn(this.options.node, ['--debug-brk=5859',this.options.shovel], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] });  
    
  3. inizio example.js in modalità debug. Per impostazione predefinita, si inizia alle 5858 porto:

    node --debug-brk example.js 
    
  4. Ora il debug sandbox.js collegandosi a 5858:

    node debug localhost:5858 
    
  5. Una volta che il processo figlio inizia, è possibile accendere terminale separato e iniziare il debug shovel.js su porto 5859:

    node debug localhost:5859 
    

Per node-inspector, penso che sia necessario utilizzare il comando node-debug anziché this.options.node per il processo figlio. Anche there are options per impostare esplicitamente la porta di debug.


Da sopra, Questi potrebbero essere i passaggi per node-inspector.Nota: Non ho provato:

  1. Idem come sopra
  2. Aprire il file sandbox.js e cambiare this line come seguire per passare opzione di debug, mentre la deposizione delle uova processo figlio. Si noti la porta è 5859:

    self.child = spawn('node-debug', ['--debug-port=5859',this.options.shovel], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] });  
    
  3. inizio example.js in modalità debug. Per impostazione predefinita, si inizia alle 5858 porto:

    node-debug example.js 
    
  4. Ora andate al browser per processo padre debug:

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

  5. Una volta che il processo figlio inizia, aprire un'altra finestra del browser per eseguire il debug shovel.js:

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

+0

Ciao, Grazie per la tua risposta dettagliata. 1. Dove devo mettere questa riga: self.child = spawn (this.options.node, ['--debug-brk = 5859', this.options.shovel], {stdio: ['pipe', 'pipe', 'pipe', 'ipc']}); 2. Che cos'è "debug-brk"? Perché non usare semplicemente "debug"? 3. Nei paragrafi 4 e 5, intendevi "node-debug" invece di "node debug" ?? Grazie. – ohadinho

+0

1. controlla il primo link nella mia risposta. 2,3: La mia risposta è per il modulo integrato ['debugger'] (https://nodejs.org/api/debugger.html). Ecco perché '--debug-brk'. Per 'node-inspector' è necessario utilizzare i propri comandi e argomenti, ma i passaggi saranno gli stessi. Sono su Windows e non posso testare dal momento che 'node-inspector' non funziona bene su Window. – hassansin

+0

ha aggiunto passaggi non testati per node-inspector. fammi sapere se funziona. – hassansin