2015-09-22 6 views
7

私はnode.jsで私のベイビーステップをやっています。私はサンドボックスメカニズムを理解しようとしています。gf3/sandboxモジュールのデバッグ

現在、私はノードv4.0.0とノードインスペクタv0.12.3を使用しています。

私はGF3 /サンドボックスモジュールをインストールし、この単純なコードでそれを実行しました:

// timer = setTimeout(function() { 
    // self.child.stdout.removeListener('output', output); 
    // stdout = JSON.stringify({ result: 'TimeoutError', console: [] }); 
    // self.child.kill('SIGKILL'); 
    // }, self.options.timeout); 
:簡単にデバッグするために

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

、私はsandbox.jsファイルにタイムアウト機能をもコメントしました

問題は、デバッグがすべての行コードshovel.jsで中断しないことです。モジュールがそのコードを使用していることを100%確信しています。

なぜですか? shovel.jsをデバッグするにはどうすればよいですか?

答えて

3

sandbox.jsは、デバッグを有効にしないでspawning shovel.js as child processです(例:--debugオプション)。したがって、子プロセスは正常に実行され、ブレークポイントは単に無視されます。デバッグモードでも子プロセスを開始する必要があります。

sandbox.jsshovel.jsの両方を同時にデバッグする場合は、別のデバッグポートを使用してください。私はノードインスペクタについてはわかりませんが、ここではデバッガモジュールでどのように行うことができるかの例です。ノードインスペクタで動作させるためにちょっと微調整できると確信しています。 sandbox.jsに子プロセスを生成しながら、

  1. コメントは、あなたのようなタイムアウトコードはすでに
  2. パスのデバッグオプションをしました。ポート注5859次のとおりです。デバッグモードで

    self.child = spawn(this.options.node, ['--debug-brk=5859',this.options.shovel], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] });  
    
  3. 開始example.js。今5858に接続してsandbox.jsをデバッグ

    node --debug-brk example.js 
    
  4. node debug localhost:5858 
    
  5. 子プロセスが起動したら、別のターミナルを起動し、上のshovel.jsのデバッグを開始することができますデフォルトでは、それは5858ポートから始まりますポート5859

    node debug localhost:5859 
    

ノードインスペクタの場合、this.options.nodeの代わりにnode-debugコマンドを子プロセスに使用する必要があると思います。また、デバッグポートを明示的に設定する場合は、there are options


上記は、node-inspectorの手順です。注:私はそれをテストしていない:

  • オープン子プロセスを生成しながら、デバッグオプションを渡すために、次のようなsandbox.jsファイルと変更this line上記のように

    1. 同じ。ポート注5859次のとおりです。デバッグモードで

      self.child = spawn('node-debug', ['--debug-port=5859',this.options.shovel], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] });  
      
    2. 開始example.js。デフォルトでは、5858ポートから始まり:

      node-debug example.js 
      
    3. は今、デバッグ親プロセスにブラウザに向かう:

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

    4. 子プロセスが開始されると、デバッグに別のブラウザウィンドウを開きます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

    関連する問題