1669

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

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

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

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

4

41 に答える 41

1298

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

次のコマンドでインストールします。

npm install -g node-inspector

次に、以下を実行します。

node-debug app.js
于 2010-10-15T17:17:02.343 に答える
781

デバッグ

プロファイリング

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

ヒープダンプ

フレームグラフ

トレース

ロギング

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

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

ベンチマーク

他の

遺産

これらは機能するために使用されますが、現在は維持されていないか、最新のノードバージョンには適用できません。

于 2013-05-12T21:37:33.650 に答える
265

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

于 2010-03-29T08:57:06.560 に答える
209

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

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

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

node --inspect server.js

--inspect-brk代わりにパスすることで、最初の行を中断することもできます。

于 2016-09-14T14:51:34.727 に答える
96

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

node debug script.js

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

于 2011-01-16T01:20:53.573 に答える
75

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

VS Codeは、VS、Eclipseなどの他のIDEで使用したのと同様のデバッグエクスペリエンスを提供します。

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

于 2016-02-19T10:21:40.970 に答える
60

私は個人的にJetBrainsWebStormを使用しています。これは、フロントエンドとバックエンドの両方のJavaScriptに最適なJavaScriptIDEであることがわかったためです。

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

私の唯一の「問題」/ウィッシュリストアイテムそれは だった

  1. MacではWindowsよりもリソースを大量に消費しているようですバージョン6では問題にならなくなったようです。
  2. スニペットがサポートされていれば便利です(Sublime Text 2のサポートのように-つまり、「fun」と入力し、「tab」をタップして関数を配置します。以下の@WickyNilliamsコメントを参照してください-ライブテンプレートを使用すると、スニペットもサポートされます。
于 2012-05-03T14:42:13.673 に答える
45

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

デバッグログ

それに直面しましょう。私たちは皆、良いものが大好きで、console.log('Uh oh, if you reached here, you better run.')時にはそれがうまく機能することもあります。そのため、そこから離れすぎないようにする場合は、少なくともVisionmediaのデバッグを使用してログにブリンブリンを追加してください。

インタラクティブなデバッグ

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

スタックトレース

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

メモリリーク

Node.jsを使用すると、サーバープロセスをかなりの時間稼働させることができます。それがいくつかの厄介なリークを引き起こしたと思う場合、あなたはどうしますか?heapdumpとChromeDevToolsを使用して、いくつかのスナップショットを比較し、何が変更されているかを確認します。


いくつかの有用な記事については、チェックしてください

あなたがビデオを見たいと思うなら、

どのパスを選択する場合でも、デバッグ方法を理解していることを確認してください

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


自分の悩みを見て、自分だけで
誰もやっていないこと を知るのは辛いことです

ソポクレス、Ajax

于 2015-09-15T15:33:22.427 に答える
43

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

スクリーンショット

于 2013-05-14T22:21:22.100 に答える
26

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

于 2014-05-02T12:30:11.103 に答える
24

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

必要に応じて、うなり声やgulpタスクをデバッグすることもできます...

于 2015-09-09T00:08:22.513 に答える
22

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

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

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

インストール:

npm install iron-node -g;

デバッグ:

iron-node yourscript.js;

于 2015-07-19T15:10:04.100 に答える
16

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

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

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()
于 2014-12-09T15:22:41.560 に答える
16

Atom IDEを使用している場合は、node-debuggerパッケージをインストールできます。

于 2015-03-30T04:04:35.500 に答える
16

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ウィンドウがあります。

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

于 2018-06-04T12:21:56.797 に答える
12

Node.js内には組み込みのコマンドラインデバッガクライアントがあります。Cloud 9 IDEには、非常に優れた(ビジュアル)デバッガーもあります。

于 2011-03-11T19:29:53.410 に答える
11

どこから始めればよいかわからない人のために、ノードインスペクターの使用に関する短いNode.jsデバッグ入門書をまとめました。

于 2013-11-21T18:31:17.530 に答える
10

VisualStudioCodeはデバッグに役立ちます。

于 2017-10-15T10:02:20.653 に答える
9

Webstormを使用してください!Node.jsアプリケーションのデバッグに最適です。デバッガーが内蔵されています。こちらのドキュメントを確認してください:https ://www.jetbrains.com/help/webstorm/2016.1/running-and-debugging-node-js.html

于 2016-07-25T19:13:43.677 に答える
8

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

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

于 2012-03-08T01:46:52.080 に答える
8

コンピューターにnode-inspectorがインストールされていると仮定すると(そうでない場合は、「npm install -g node-inspector」と入力するだけです)、次のコマンドを実行する必要があります。

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

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

于 2013-04-29T01:20:36.680 に答える
8

完全を期すために:

PyCharm 3.0 + Node.jsプラグインは、素晴らしい開発+実行+デバッグエクスペリエンスを提供します。

于 2014-02-05T01:27:05.643 に答える
8

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

node --inspect index.js

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

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

于 2018-02-09T19:05:32.830 に答える
6

新しいオープンソースのNodeclipseプロジェクトがあります(EclipseプラグインまたはEnide Studioとして):

Nodeclipseは、2013年のEclipseトップ10の新しいプラグインで1位になりました。変更されたV8デバッガー(Java用のGoogle Chrome Developer Toolsから)を使用します。

Nodeclipseは、毎月初めにリリースされる無料のオープンソースソフトウェアです。

于 2014-01-02T05:24:39.853 に答える
6

多くの可能性があります...

デバッグサポートは、多くの場合、v8デバッグプロトコルまたは新しいChromeデバッグプロトコルを使用して実装されます。

于 2017-01-21T06:13:29.117 に答える
5

IntelliJはNode.jsで素晴らしい働きをします。

さらに、IntelliJは「コードアシスタンス」を適切にサポートします。

于 2015-08-05T03:34:42.367 に答える
4

NetBeans IDEは、バージョン8.1以降Node.jsをサポートしています。

<...>

新機能のハイライト

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

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

<...>

その他の参考資料:

  1. NetBeans Wiki/NewAndNoteworthyNB81
  2. NetBeans IDE、Geertjan-OracleのNode.jsExpressアプリ
于 2015-11-24T08:26:37.743 に答える
4

このコマンドを使用する

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect
于 2018-03-24T01:51:59.340 に答える
4

ndbは、Chrome DevToolsによって有効化された、Node.jsの改善されたデバッグエクスペリエンスです。

https://github.com/GoogleChromeLabs/ndb

于 2018-12-11T19:52:44.320 に答える
3
node-debug -p 8888 scriptFileName.js
于 2014-05-07T15:53:27.580 に答える
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ビオラを押します。ブラウザでデバッグします。

于 2015-05-14T18:20:39.553 に答える
3

他の回答で言及されていない別のオプションは、Rookoutと呼ばれるツールを使用することです。これは、ローカルアプリとリモートアプリの両方からデータをデバッグおよび取得するために使用されます。実稼働環境でデータを他のサービスに集約するために使用します-多くの頭痛の種とハードコードされたロギングを節約します

于 2020-01-22T09:20:27.353 に答える
2

私の最初の応答は、数年前のプレビジュアルスタジオでした。

したがって、 hapiでGOODを使用することは優れたログパッケージですが、デバッグにはVisualStudioを使用します。

元の応答(少し前): WalmartLabsのGOODを使用します。それは仕事をします、そしてそれは非常に柔軟です:

var hapi = require('hapi');
var good = require('good');
var server = hapi.createServer('localhost', 5000,{});
server.route({SOME ROUTE HERE});
server.start();

var options = {
subscribers: {
    'console':               ['ops', 'request', 'log', 'error'],
    'http://localhost/logs': ['log']
    }
};
server.pack.require('good', options, function (err) {

    if (!err) {
        console.log('Plugin loaded successfully');
    }
});
于 2014-03-12T05:10:29.667 に答える
2

必要に応じて、純粋なNode.jsを使用し、コンソールでアプリケーションをデバッグできます。

たとえば、debug.jsデバッグするダミーファイルを作成し、そのファイルにブレークポイントを設定しましょう(debuggerステートメント)。

let a = 5;
debugger;

a *= 2;
debugger;

let b = 10;
debugger;

let c = a + b;
debugger;

console.log(c);

inspect次に、次のコマンドを使用してデバッグ用にこのファイルを実行できます。

node inspect debug.js

これにより、コンソールでデバッガーが起動し、次のような出力が表示されます。

< Debugger listening on ws://127.0.0.1:9229/6da25f21-63a0-480d-b128-83a792b516fc
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in debug.js:1
> 1 (function (exports, require, module, __filename, __dirname) { let a = 5;
  2 debugger;
  3

ここで、ファイルの実行が最初の行で停止されていることに気付くかもしれません。この瞬間から、次のコマンド(ホットキー)を使用してファイルを段階的に確認できます。

  • cont続ける、
  • next次のブレークポイントに移動するには、
  • inステップインするには、
  • outステップアウトする
  • pause一時停止します

cont数回入力して、ブレークポイントからブレークポイントに移動する方法を見てみましょう。

debug> next
break in misc/debug.js:1
> 1 (function (exports, require, module, __filename, __dirname) { let a = 5;
  2 debugger;
  3
debug> next
break in misc/debug.js:2
  1 (function (exports, require, module, __filename, __dirname) { let a = 5;
> 2 debugger;
  3
  4 a *= 2;
debug> next
break in misc/debug.js:4
  2 debugger;
  3
> 4 a *= 2;
  5 debugger;
  6

replここでできることは、コマンドを記述して、この時点で変数値を確認することです。これにより、変数名を記述してその値を確認できます。

debug> repl
Press Ctrl + C to leave debug repl
> a
5
> b
undefined
> c
undefined
>

a = 5現時点で、bおよびcが未定義であることがわかります。

もちろん、より複雑なデバッグには、いくつかの外部ツール(IDE、ブラウザー)を使用することをお勧めします。あなたはここでもっと読むことができます。

于 2018-09-20T11:20:42.293 に答える
2

[ファイル]->[設定]->[設定]->[自動接続の検索]を検索してオンに設定し、コンソール( + )を開くか、[ターミナル] -> [新しいターミナル]メニューから[ VSCode ]設定を有効にし、コードにブレークポイントを設定して、次のように入力しますコマンドctrl*

node --inspect <name of your file>

これによりデバッグが開始され、VSCodeに[デバッグ]メニューが表示されます。

注:自動接続は、ノードクラスターワーカースレッドを使用している場合にも非常に役立ちます。

于 2019-12-26T05:21:00.457 に答える
2

このメソッドは、JSにもノードjsにも有効です。debugger確認したい単語を入れます。open the inspect elementブラウザでJSまたはNodejsアプリを実行している場合。その行に達すると、実行は下の画像のように一時停止します。

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

于 2021-05-04T07:30:53.600 に答える
1

デバッグする方法はたくさんありますが、私はノードjsによる組み込みデバッガーを使用することを好みます。

app.jsファイル

var fs = require('fs');

fs.readFile('test.txt', 'utf8', function (err, data) {

debugger;

if (err) throw err;

console.log(data); });

指図: node debug app.js

于 2019-11-14T11:55:38.003 に答える
1

IDEを使用

WebStormでは、package.jsonファイルを開いて、そこからDEBUGモードでスクリプトを実行できます。側面にある緑色の再生ボタンをクリックするだけです。

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

--inspectを使用

IDEを使用せずにCLIから直接アプリケーションをデバッグする場合は、のようにスクリプトを実行できますnode index.js --inspect。デフォルトでは、ポート5858でリッスンし、デバッガーに接続できるようにします。または、で別のポートを指定することもできます--inspect=5858

環境変数付き

  1. myInspector.js次のようなスクリプトを作成します。
let inspector = require("inspector");

// you could explicitly specify a port.
// or alternatively set it to 0 to get any available port.
const port = 0;
inspector.open(port, undefined, true);

// print the url which also reveals the port.
const url = inspector.url()
console.log(url);
  1. 環境変数を設定するNODE_OPTIONS="--require myInspector.js"
  2. スクリプトを起動します。

実際、これはWebStormがインスペクターを注入する方法でもあります。美しさは、どのランチャーを使用しても機能することです。したがって、.sh/.batファイルを使用することもできnpm run ...ますnode-ts ...

于 2021-07-28T15:41:05.243 に答える
0

Node.JSアプリケーションをデバッグする方法は次のとおりです。

1)devtoolをインストールし、それを使用してアプリケーションを起動します

npm install devtool -g --save
devtool server.js

これはChromeデベロッパーモードで開くので、デバッガーポイントを配置してテストできます。

2)ノードインスペクターでデバッグする

node-inspector

3)--debugを使用してデバッグする

node --debug app.js 
于 2018-04-05T06:28:46.583 に答える
0

試してみることができます-エラーをキャッチします:

function yourFunc() {
  try {
      // YOUR CODE HERE
  } catch (err) {
      console.error(err.message + ", " + err.trace);
  }
}

エラーメッセージとエラートレースは、実行時のバグを特定して修正するために必要な情報を提供します。

于 2020-02-27T12:13:56.130 に答える
0

ノードjsを使用するVSコード開発者専用。組み込みデバッグを有効にする

ファイル>設定>設定>検索ボックスに「autoattach」と入力し、デバッガーの接続方法を設定します[preferred onlyWithFlag] 自動接続を有効にする

魔法を言うと、あなたは見るべきです

自動接続-アクティブ

--inspectを使用してノードプログラムを実行します。vsコードは彼女の仕事をします:)

ヒント:always filterを有効にすることで、-inspectなしで実行することもできます

于 2021-08-25T14:35:42.923 に答える