Node.jsアプリケーションをデバッグするにはどうすればよいですか?


1578

Node.jsサーバーアプリケーションをデバッグするにはどうすればよいですか?

現在、私は主に次のような印刷ステートメントでアラートデバッグを使用しています。

sys.puts(sys.inspect(someVariable));

デバッグするより良い方法があるはずです。Google Chromeにはコマンドラインデバッガーがあることを知っています。このデバッガーはNode.jsでも利用できますか?


3
Locusをコマンドラインインジェクションに使用できます。
Ali Davut

5
従来のIDEアプローチでデバッグする場合は、vscodeを使用しますvscode youtube.com/watch?v=egBJ0cd0GLM
jw56578

4
この記事は非常に興味深いものであり、私にとっては問題なく機能します。ChromeDevToolsを使用したNode.jsのデバッグです。それがお役に立て
ば幸いです

2
「アラートデバッグ」:)
Red Pea

ロード時に実際のサーバーコードをデバッグする場合は、--inspect-brkINSTEAD OFでnodを実行する必要があることに注意して--inspectください。stackoverflow.com/questions/59596138を
Jorge Orpinel

回答:


1261

ノードインスペクターはその日を救うことができます!WebSocketをサポートするブラウザから使用してください。ブレークポイント、プロファイラー、ライブコーディングなど...それは本当に素晴らしいです。

それをインストールします:

npm install -g node-inspector

次に実行します:

node-debug app.js

14
ノードインスペクタがアクティブであることを望みます。プロファイリングコンポーネントは、いくつかの愛を得る必要があります。
ジョナサンデュメイン

13
残念ながら、node-inspectorは最新バージョンのNode.jsでは動作せず、v0.1以降、ブラウザーコンソールへのロギングをサポートしていません。node-codeinはバギーでした。そこで、オブジェクトなどをWebブラウザーコンソールにダンプできるようにすることで、デバッグに役立つ独自のモジュールを作成しました。私はそれが他の誰かに役立つかもしれないと思った:node-monkey。さらに、FirefoxとChromeの両方で機能します。
ジャスティンウォーケンティン

7
これは見たところ驚くほど人気のあるツールだったので、元の作者がそれを維持するためのリソースがなくなったことを確かに認めたという事実は、オープンソースコミュニティがそれを取り上げることができるので問題にはなりませんか?
PeterT 2013年

34
現在、インスペクタはStrongLoopによって積極的にメンテナンスされており、最新バージョン(0.3)で再び動作しています。ここにお知らせ:blog.strongloop.com/...
balupton

21
「バージョン6.3以降、Node.jsは、主にNode Inspectorを非推奨にする、組み込みのDevToolsベースのデバッガーを提供します。たとえば開始するには、このブログ投稿を参照してください。組み込みのデバッガーは、V8 / Chromiumチームによって直接開発され、特定の高度な機能を提供しますNode Inspectorで実装するのが難しすぎる機能(長い/非同期スタックトレースなど)。」-ノードインスペクターのレポによる
ThisClark

750

デバッグ中

プロファイリング

  1. node --prof ./app.js
  2. node --prof-process ./the-generated-log-file

ヒープダンプ

フレームグラフ

トレース

ロギング

デバッグ情報を出力するライブラリ

スタックトレース情報を強化するライブラリ

ベンチマーク

その他の

レガシー

これらは動作するように使用されますが、保守されなくなったか、最新のノードバージョンに適用できなくなりました。


8
Nodetimeについて:ノードタイムサーバーにデータを送信したくない人のlookために、stackoverflow.com
2013年

nodetimeからのcpuレポートがあまり役に立たないと思います。1.「自己」時間のないメソッドのツリーを取得します。2.木の枝が一定数のパーセンテージ以下でトリミングされているようです。これら2つは、CPUがほとんどの時間を費やしている場所を理解することを非常に困難にします。
shacharz 14

npm install -g profilerは、Windows 7でpythonが欠落していると文句を言います。私はpython = C:\ Python34 \を設定しようとしましたが、これがクラッシュします。
Stepan Yakovenko

そのまま使用できるプロファイラーはnodetimeだけです。ただし、そのCPUプロファイリングスタックトレースは使用できません(十分な詳細が提供されていません)。Nodejsツール4 msvc 2012にもプロファイラーがありますが、重大な未修正のバグも報告されています...
Stepan Yakovenko 14

私のために働いた唯一のプロファイラーはnprof+ v8.logfrom node --profでした。
Dan Abramov

253

V8のグーグルの一部としてリリースデバッガChromeデベロッパーツールはデバッグNode.jsのスクリプトに使用することができます。これがどのように機能するかの詳細な説明は、Node.js GitHub wikiにあります


12
興味があるのは、Paul IrishとPavelが行ったGoogle IOでのプレゼンテーションの後、Eclipseを使用せずにnode.jsをChromeデベロッパーツールに直接デバッグできるようになったことです。
バラプトン

+1とてもうまくいきました。Mac OS Xで新しいEclipse 3.x、x64バージョンを使用します。インストール手順もよく書かれています。ありがとうございました。
アマチュアバリスタ2012年

Nodeclipse nodeclipse.orgにも含まれます(Node.js関連のいくつかのバグが修正されています)
Paul Verest

この分野への私のエントリーはtrepanjs(npmjs.com/package/trepanjs)です。これはノードデバッガの優れた点をすべて備えていますが、gdbによく適合しています。また、構文の強調表示、より広範なオンラインヘルプ、よりスマートな評価など、より多くの機能とコマンドがあります。クールな機能のいくつかについては、github.com / rocky / trepanjs / wiki / Cool-thingsを参照してください。
岩だらけの

1
この機能は現在、ナイトリーバージョンで利用できます。手順については、こちらをご覧くださいhttps://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
。– zeronone

191

ノードには、バージョン6.3の時点で独自の組み込み GUIデバッガーがあります(ChromeのDevToolsを使用)

ノード組み込みGUIデバッガー

インスペクターフラグを渡すだけで、インスペクターへのURLが提供されます。

node --inspect server.js

--inspect-brk代わりに渡すことで、最初の行で改行することもできます。


2
上記の手順を割引くためではなく、単に共有するために...私は、インストールが簡単であるだけでなく、わずかにより堅牢なラッパーを作成しようとしました。参照:github.com/jaridmargolin/inspect-process
Jarid R. Margolin

1
@ JaridR.Margolinニース。代わりにそれを使用するように答えを更新しました。多くのセットアップが簡単に、より良い作品:)
gregers

2
この答えは現在一番下にあり、実際に私のために働いたのはそれだけです。これはすごいです!
LOAS

3
誰かを助けるために、このプロセスを説明するビデオをyoutu.be/rtZKUnks6jIに投稿しました
RoccoB 2017年

2
Chromeデベロッパーツールのダークなテーマはどこで入手しましたか?
Pieter Meiresone 2017

93

Node.jsバージョン0.3.4+には、デバッグサポートが組み込まれています。

node debug script.js

マニュアル:http : //nodejs.org/api/debugger.html


1
使い方のドキュメントへのリンクはありますか?
Fabian Jakobs、2011年

2
ドキュメントはありません。v0.3.5に更新されました。「デバッガ」という行を入れます。コード内でブレークポイントとして機能します。ndb / gdbのように機能します。「node debug script.js」と入力した後、ヘルプを入力します。サポートされているコマンドが表示されます。p =印刷、l =リスト...全世界を入力する必要はありません
JulianW

2
Windowsでは「node.exe --debug myscript.js」ですが、それでも機能しません。
Marcの

6
おそらくダッシュなしに変更--debugするdebug必要があります。それが私が最終的にそれを機能させた方法です。それは混乱し--debugdebug2つの異なることを行います。
benekastah '10

プログラムを実際に実行するにはどうすればよいですか?「r-> app is already running...」を続行しようとすると、入力を取得しようとしているステートメントに遭遇すると、必要な入力を入力させる代わりに、デバッグプロンプトに戻ります。
マイケル

70

デバッグには Visual Studio Codeを選択します。ツールやnpm installものをインストールするオーバーヘッドはありません。アプリの開始点をpackage.jsonに設定するだけで、VSCodeがソリューション内に構成ファイルを自動的に作成します。これは、Atomなどのエディターが構築されているElectron上に構築されています。

VSコードは、VSやEclipseなどの他のIDEと同じようなデバッグエクスペリエンスを提供します。

ここに画像の説明を入力してください ここに画像の説明を入力してください


かっこいいですが、遅れがあります。だからこそ、私は今までにSublimeを好みます。
calbertts

3
しかしsublimeにはデバッガーがなく、VSコードもかなり高速だと思います
Syed Faizan

1
私は5年前から崇高なライセンスを取得しています。数か月前から、Sublime Textをインストールしていません。vscodeだけをインストールしています。箱から出しただけで、Sublimeにはないツールがたくさんあります(統合ターミナルなど)。
elboletaire

常にconfigフォルダーを要求すると、そのままでは機能しません
carkod

@carkod enable vs code auto attach設定を使用し、vs code ターミナルを使用してスクリプトを開始します。例:node --inspect file-name.js
Vipul Dessai

57

JetBrains WebStormは、私が見つけた唯一のJavaScript IDEであり、フロントエンドとバックエンドの両方のJavaScriptに適しているため、私は個人的に使用しています。

複数のOSで動作し、Node.jsデバッグが組み込まれています(他にも多くのものが含まれています)(http://www.jetbrains.com/webstorm/features/index.html)。

私の唯一の「問題」/ほしい物リストのアイテム だった

  1. MacよりWindowsより多くのリソースを必要とするようです バージョン6の問題ではなくなったようです。
  2. Sublime Text 2のような)スニペットをサポートしていると便利です。つまり、「fun」と入力し、「tab」をタップして関数を入力します。 以下の@WickyNilliamsコメントを参照してください-ライブテンプレートを使用すると、スニペットもサポートされます。

10
ウェブストームはスニペットをサポートしています;-)それらはスニペットの代わりに「ライブテンプレート」として知られています。
WickyNilliams 2012

3
node.jsアプリをデバッグするだけで、すでにIntellij IDEAライセンスを持っている場合は、WebStormライセンスを購入しなくても、node.jsプラグインをインストールできます。プラグインをインストールすれば、実行/デバッグ構成の設定は非常に簡単です。
Josh Liptzin 2014年

42

ここにはたくさんの素晴らしい答えがありますが、私のアプローチを追加したいと思います(私のアプローチの進化に基づいて)

デバッグログ

それに直面しましょう。私たちは皆、良いconsole.log('Uh oh, if you reached here, you better run.')ことを愛し、時にはそれがうまく機能するので、遠くに移動することに抵抗がある場合は、少なくともVisionmediaのデバッグでログにいくつかのブリングを追加してください。

対話型デバッグ

コンソールロギングと同じくらい便利ですが、専門的なデバッグを行うには、袖をまくって、こだわる必要があります。ブレークポイントを設定し、コードをステップ実行し、スコープと変数を調べて、奇妙な動作の原因を調べます。他の人が述べたように、ノードインスペクタは実際にはミツバチの膝です。組み込みのデバッガーで実行できることはすべて行いますが、使い慣れたChrome DevToolsインターフェイスを使用します。、私のように、あなたが使用している場合はWebstormを、そしてここで、そこからデバッグに便利なガイドです。

スタックトレース

デフォルトでは、イベントループ(ティック)のさまざまなサイクルにわたって一連の操作をトレースすることはできません。これを回避するには、ロングジョンを見てください(ただし、本番環境ではありません!)。

メモリーリーク

Node.jsを使用すると、サーバープロセスがかなりの時間稼働し続けることが期待できます。いくつかの厄介なリークが発生していると思われる場合はどうしますか?使用heapdumpとChromeデベロッパーツールはいくつかのスナップショットを比較し、変更しているものを確認します。


役立つ記事については、チェックしてください

ビデオを見たいと思ったら

選択するパスが何であれ、デバッグ方法を理解していることを確認してください

ここに画像の説明を入力してください


あなた自身のトラブルを見て、あなた自身と
他の誰もそれを作ったことがないことを知ることは痛いことです

ソフォクレス、Ajax


41

テセウスはアドビの研究によるプロジェクトで、オープンソースエディターのブラケットでNode.jsコードをデバッグできます。リアルタイムコードカバレッジ、遡及検査、非同期呼び出しツリーなどの興味深い機能がいくつかあります。

スクリーンショット


これはかなりクールですが、それでもthoのバックトレースが何であるかはわかりません
misaxi

私は現在テセウスを愛していますが、ブレークポイントを設定してトレースする必要があるいくつかの問題がまだあります。私は現在、自分のアプリを強制終了し、ノードを--debugで起動し、トレースを追跡してから、node-theseusでアプリを起動する必要があります。テセウスをブレー​​クポイントで使用することは可能ですか?GitHubページ、StackOverflow、フォーラムを検索してみましたが、今のところうまくいきません。何か不足していますか?
ユージーン

25

Node.js Tools for Visual Studio 2012または2013には、デバッガーが含まれています。ここの概要は、「Node.js Tools for Visual Studioには、ノードアプリのデバッグの完全なサポートが含まれています。」と記載されています。Node.jsは初めてですが、.NETのバックグラウンドがあるため、このアドインはNode.jsアプリケーションをデバッグするための優れた方法であることがわかりました。


23

Visual Studio Codeは、Node.jsのデバッグをサポートしています。これは無料のオープンソースでクロスプラットフォームであり、Linux、OS X、Windowsで動作します。

必要場合は、うなりや不満のタスクをデバッグすることもできます...


1
Visual Studio Code 8.0から、OSXおよびLinuxのデバッグサポートが非常によくなりました。
bgse 2015年

一晩過ごした後、ノードインスペクタとstrongloopがWindowsで機能するようにし(Visual Studio Community、npm 2にダウングレードし、python、env変数をインストールし、cmdをbabun / cygwinではなく使用するなど)、これを1時間プレイします。 、私はこれが少なくともウィンドウズで、そしておそらく一般的には最良のオプションであると言わなければなりません(webstornがない場合)
ダッシュアンブル

22

Node.jsコードをデバッグするための別のアプローチを作成しました。これは安定しており、非常に簡単です。https://github.com/sa/iron-nodeで入手できます

ここに画像の説明を入力してください

オープンソースのクロスプラットフォームビジュアルデバッガー。

インストール:

npm install iron-node -g;

デバッグ:

iron-node yourscript.js;



15

Chromeバージョン67.0.3396.62(+)の使用

  1. ノードアプリを実行する

node --inspect-brk = 0.0.0.0:9229 server.js(server js filename)

  1. アプリをChromeで閲覧します(例: "localhost:port")
  2. DevToolsを開きます。
  3. レスポンシブデバイスアイコンの横にあるノードアイコンをクリックします。

ここに画像の説明を入力してください

ノードアプリのデバッグ専用に表示される別のDevToolsウィンドウがあります。

ここに画像の説明を入力してください


13

私はあなたを助けることができるpry.jsと呼ばれるきちんとした小さなツールを作成しました。

単純なステートメントをコードのどこかに入れ、スクリプトを通常どおり実行すると、nodeは現在のスレッドを停止し、すべての変数と関数にアクセスできるようになります。それらを自由に表示/編集/削除してください!

var pry = require('pryjs')

class FizzBuzz

  run: ->
    for i in [1..100]
      output = ''
      eval(pry.it) // magic
      output += "Fizz" if i % 3 is 0
      output += "Buzz" if i % 5 is 0
      console.log output || i

  bar: ->
    10

fizz = new FizzBuzz()
fizz.run()





8

--inspectフラグを使用してノードプロセスを開始します。

node --inspect index.js

そしてchrome://inspect、クロムで開きます。[ノード専用の専用DevToolsを開く]リンクをクリックするか、この Chrome拡張機能をインストールすると Chrome DevToolsを簡単に開くことができます。

詳細については、このリンクを参照しください


7

Node.jsの強力なロギングライブラリが必要な場合は、トレーサーhttps://github.com/baryon/tracerの方が適しています。

タイムスタンプ、ファイル名、メソッド名、行番号、パスまたはコールスタックを含むログメッセージを出力し、カラーコンソールをサポートし、データベース、ファイル、ストリームトランスポートをサポートします。私は著者です。


7

コンピュータにノードインスペクタがインストールされていると想定します(インストールされていない場合は、「npm install -g node-inspector」と入力します)。実行する必要があります。

node-inspector & node --debug-brk scriptFileName.js

そして、コマンドラインからURIをWebKit(Chrome / Safari)ブラウザーに貼り付けます。


1
node-inspectorについてはすでに触れました。多分この答えを削除しますか?
Dan Dascalescu 2014





4

NetBeansの IDEは、以来、Node.jsのサポートを持っていたバージョン8.1

<...>

新機能のハイライト

Node.jsアプリケーション開発

  • 新しいNode.jsプロジェクトウィザード
  • 新しいNode.js Expressウィザード
  • 拡張されたJavaScriptエディター
  • Node.jsアプリケーションの実行に対する新しいサポート
  • Node.jsアプリケーションのデバッグの新しいサポート。

<...>

追加の参照:

  1. NetBeans Wiki / NewAndNoteworthyNB81
  2. NetBeans IDEでのNode.jsエクスプレスのApp、Geertjan-オラクル



3

小さなNode.jsスクリプトをお気に入りのブラウザーデバッガーですばやく簡単にデバッグするには、browserifyを使用します。このアプローチは、ネイティブI / Oライブラリを必要とするアプリケーションでは機能しませんが、ほとんどの小さなスクリプトには十分です。

$ npm install -g browserify

すべてのvar x = requires('x')呼び出しをrequires.jsファイルに移動して実行します。

$ browserify requires.js -s window -o bundle.js

(ここでの欠点はrequires、すべてのファイルでを移動するかコメントする必要があることです。)

次のbundle.jsようにHTMLファイルにを含めます。

<script type="text/javascript" src="bundle.js"></script>

次に、ブラウザーにファイルをロードしてF12、viola を押します。ブラウザーでデバッグします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.