Gruntタスクでのノードインスペクターの使用


101

誰かがアプリケーションのデバッグにGruntノードインスペクターを使用しましたか?そうでない場合、Gruntベースのアプリのデバッグツールを推奨できますか?

私が働いているnodejsサーバー側のアプリのために、私は持っているの兵卒が分離されたタスクを使用する(ユーザーが個別にタスクを実行することができるからです)。


console.logはあなたの友達です。ノードインスペクタにアクセスしたいのですが、デバッグツールはV8の一部ではないと思います。私が理解しているように、デバッグツールはそれ自体がWebアプリです。私があなたの試みをやりたいので、私がここで間違っているなら私を訂正してください。
iancrowther 2012

はい、ログシステム(つまり、console.logまたは他の種類のログメカニズム)は常に私たちの友人ですが、私が必要としているのは、異なる、よりデバッグ可能な方法です。今までに、gruntを使用したプロジェクトに欠落している要件がいくつか見つかったので、今までに削除し、nodejsを独自に使用して、node-inspectorを使用してデバッグできるようになりました。私は知っています、それは解決策ではありませんが、それは機能します。将来的には、node-inspectorと他のツール/機能を追加して、もう一度gruntを追加すると思います。最後に重要なことですが、うめき声​​は素晴らしいです!私は他のプロジェクトでそれを使用していて、本当に素晴らしいです!
JuanO 2012

Gruntで遊んだところです。その質問にも興味があります...
Dmitry Pashkevich '13

@ iancrowther、Webインスペクターが使用するツールはV8にあります。プロジェクトがあるnode-inspectorと会談することをnode --debug接続するブラウザにデバッグ情報を提供するには、。Chromeをノードインスペクタープロセスに接続し、すべてのウェブインスペクターツールを使用してアプリをデバッグできるため、これはすばらしいことです。 github.com/dannycoates/node-inspector
デビッドサウザー

回答:


135

デバッグでgruntを実行するには、明示的にgruntスクリプトをノードに渡す必要があります。

node-debug $(which grunt) task

そしてdebugger;、あなたの仕事に線を入れてください。node-inspector次に、デバッグツールを使用してブラウザを開きます。

2014年2月28日を編集

node-inspectornode-debugノードを--debug状態で起動し、ブラウザをnode-inspectorページに開き、最初のdebugger行に到達するかブレークポイントを設定すると停止するコマンドを追加しました。

2015年1月30日を編集

Windowsでは、状況は少し複雑です。手順については、@ e.gluhotorenkoからの回答を参照してください。


1
これは素晴らしい。また、グローバルにインストールされた他のnpm binでも機能します。
2014年

1
node debug $(which grunt)タスクはnodejsデフォルトデバッガーを使用
Tomas Romero

3
これで少し問題があります。何$(which grunt)が分かりますか?デバッグしたいGruntfile.jsだけですか?そして、task私は(serve例として使用して)置くgrunt serveだけserveですか?私はnode-debug Gruntfile.js serveいろいろと試しましたが、これを機能させることができません。ノードインスペクターが開き、最初の行で中断しserveますdebugger;が、関数の最初の行として行を入力しても、タスクに割り込むことができません。
ブレット

2
@ブレット、あなたはウィンドウズですか、それともOSX / Linuxですか?UNIXでは、$(which grunt)はgrunt-cli grunt.jsスクリプトへのフルパスに置き換えられます。それは実際にGruntを実行するスクリプトです。Windowsを使用している場合は、stackoverflow.com / a / 13443026/240358(以下の答え)でgrunt-cliスクリプトの可能な場所を確認してください。それはgruntあなたのコマンドの代わりになります-あなたの例では、置き換えますtaskserve
デヴィッド・サウザー

@DavidSoutherに感謝します。回答にウィンドウ固有の部分を追加しますか?私は本当にLinuxに移行する必要があります...
Brett

39

Windowsソリューション

走る

node --debug-brk c:\Users\username\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt taskname

ディレクトリのcmdからGruntfile.jsdebugger;必要な場所に線を入れることを忘れないでください。


3
0.4うなり声うなり声のエントリポイントで開始することの一部であるgrunt-cliパッケージ:node --debug-brk [..]\node_modules\grunt-cli\bin\grunt
mistaecko

4
Windowsの説明ありがとうございます。powershellでは、チルダを使用してこれを少し脆弱にできますnode --debug-brk (Resolve-Path ~\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) taskname
George Mauer

ああ、私はこれを理解し、私の答えを更新する30分を費やしました 下にスクロールすればよかったのに!
David Souther、2015年

1
別のコンソールを開いて実行するのを忘れないでくださいnode-inspector
valter.santos.matos

@ valter.santos.matos実際には、ノードを使用する必要があります
Jackie

7

デバッグするには、binの下のgruntファイルを変更する必要があります。私のマシンではgruntがグローバルにインストールされているので、/ usr / local / lib / node_modules / grunt / binに移動し、ファイルを開いて変更しました。

#!/usr/bin/env node

#!/usr/bin/env node --debug-brk

--debug-brkは、実行されたjavascriptの最初の行で中断します。

ただし、ノードインスペクタのドロップダウンでひどいタスクのjsファイルを見つけることができないため、それだけでは十分ではないため、デバッグ対象のファイルを変更して、debugger;場所を追加する必要があります。ブレークポイントを発生させたい。これで、最初の休憩の後で[続行]をクリックできます。debugger;ラインを

かなり賢いですが、これが私がこれまでに見つけた唯一の方法です。


2
/ usr / bin / envのさまざまな動作と、シバン行の#と\ nの間の文書化されていないマジックに依存しているため、これは非常に扱いにくいです。
デビッドサウザー

2
私にはうまくいきません。Gruntは引き続きデバッグモードなしで実行されます。
Eugene Gluhotorenko

@DavidSouther Shebangsは、文書化されていない魔法ではありません。それらは標準化されたPOSIXの動作です
Miles Rout

6

私は最近、grunt-node-inspectorを作成して、残りのgruntワークフローでnode-inspectorを簡単に構成できるようにしています。https//github.com/ChrisWren/grunt-node-inspectorを確認してください。

これは、grunt-node-inspector、grunt-concurrent、およびgrunt-shellを使用してgruntタスクをデバッグする方法を示すGruntfileのセクションです。https//github.com/CabinJS/Cabin/blob/master/Gruntfile。 js#L44-L77


あなたは考えていnode --debug-brk $(which grunt) node-inspector build testます、何かを実行しますか?私はすきです。
David Souther 2013年

それは永遠に実行されるので、node-inspector終了して許可buildtestず実行されないので、私が同時に使用することを除いて、ほとんど。設定したスニペットへのリンクを追加しました。
ChrisWren 2013年

うーん。考え直してみると...私のワークフローではnode-inspector &、を開始し、バックグラウンドに残し、それを完了と呼びます。それについてあなたの考えはありますか?
David Souther、2013年

1
理由はわかりませんが、これは私にはうまくいかないようです。コマンドを実行してgrunt node-inspectorからlocalhostのURLに移動しても、ソースファイルが表示されません。空のデバッガツール。
クリスホレンベック2014年

2つの別々のコマンドを実行して、ソースを表示させることができました。grunt node-inspectorそしてnode --debug-brk Gruntfile.js私のうなり声ディレクトリから。しかし、gruntファイルにブレークポイントを設定すると、接続エラーでクラッシュします。
クリスホレンベック2014年

4

アプリを実行してノードインスペクターを起動するタスクを実行しました。これは現在の命題よりもはるかに優れています。このタスクをgruntfileに追加するだけです。

  grunt.registerTask('debug', 'My debug task.', function() {
        var done = this.async();
        grunt.util.spawn({
            cmd: 'node',
            args: ['--debug', 'app.js'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('node started');
        grunt.util.spawn({
            cmd: 'node-inspector',
            args: ['&'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('inspector started');
    });

1
grunt-node-inspectorの作者はそれを正しく理解しています。このソリューションはposix環境でのみ機能しますが、彼はノードインスペクターの構成が容易であり、並行してposixとウィンドウで機能します。
rainabba

3

ここで素晴らしい答え。2017年に今できること

node --inspect --debug-brk $(which grunt) taskName

のようなものを印刷します。

To start debugging, open the following URL in Chrome: chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/232652c3-f63c-4b00-8de9-17dfad5db471

そのURLをChromeで開くと、準備完了です。

Node 7.3.0を使用していますが、Macを使用しています。あなたはそれをWindowsで動かすために他の投稿のアドバイスのいくつかに従う必要があるかもしれません。


2

2019年更新

  • グラントタスクをデバッグモードで起動し、最初の行で中断する場合:

    node --inspect-brk $(which grunt) taskName

  • 特定のポートでデバッグモードでgruntタスクを起動する場合:

    node --inspect-brk=8080 $(which grunt) taskName

  • gruntのデバッグセッションを実行しているノードプロセスにVSCODEをアタッチする場合は、vscodeで次の構成を使用します。

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    
    {
      "type": "node",
      "request": "attach",
      "name": "Attach by port IP 5656",
      "port": 8080
    }
  ]
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.