Node.jsサーバーアプリケーションをデバッグするにはどうすればよいですか?
現在、私は主に次のようなprintステートメントでアラートデバッグを使用しています。
sys.puts(sys.inspect(someVariable));
デバッグするためのより良い方法があるはずです。GoogleChromeにはコマンドラインデバッガがあることを知っています。このデバッガーはNode.jsでも使用できますか?
Node.jsサーバーアプリケーションをデバッグするにはどうすればよいですか?
現在、私は主に次のようなprintステートメントでアラートデバッグを使用しています。
sys.puts(sys.inspect(someVariable));
デバッグするためのより良い方法があるはずです。GoogleChromeにはコマンドラインデバッガがあることを知っています。このデバッガーはNode.jsでも使用できますか?
node-inspectorはその日を救うことができます!WebSocketをサポートする任意のブラウザーから使用してください。ブレークポイント、プロファイラー、ライブコーディングなど...本当に素晴らしいです。
次のコマンドでインストールします。
npm install -g node-inspector
次に、以下を実行します。
node-debug app.js
node --prof ./app.js
node --prof-process ./the-generated-log-file
デバッグ情報を出力するライブラリ
スタックトレース情報を強化するライブラリ
これらは機能するために使用されますが、現在は維持されていないか、最新のノードバージョンには適用できません。
Google Chromeデベロッパーツールの一部としてリリースされたV8デバッガーは、Node.jsスクリプトのデバッグに使用できます。これがどのように機能するかの詳細な説明は、Node.jsGitHubwikiにあります。
インスペクターフラグを渡すだけで、インスペクターへのURLが提供されます。
node --inspect server.js
--inspect-brk
代わりにパスすることで、最初の行を中断することもできます。
Node.jsバージョン0.3.4+には、デバッグサポートが組み込まれています。
node debug script.js
マニュアル: http: //nodejs.org/api/debugger.html
VisualStudioCodeがデバッグ用の私の選択になります。ツールなどをインストールするオーバーヘッドはありませんnpm install
。package.jsonでアプリの開始点を設定するだけで、VSCodeはソリューション内に構成ファイルを自動的に作成します。これは、AtomなどのエディターがElectron
VS Codeは、VS、Eclipseなどの他のIDEで使用したのと同様のデバッグエクスペリエンスを提供します。
私は個人的にJetBrainsWebStormを使用しています。これは、フロントエンドとバックエンドの両方のJavaScriptに最適なJavaScriptIDEであることがわかったためです。
複数のOSで動作し、Node.jsデバッグが組み込まれています(他にもたくさんあります)(http://www.jetbrains.com/webstorm/features/index.html)。
私の唯一の「問題」/ウィッシュリストアイテムそれは だった:
ここには素晴らしい答えがたくさんありますが、私の見解を追加したいと思います(私のアプローチがどのように進化したかに基づいて)
それに直面しましょう。私たちは皆、良いものが大好きで、console.log('Uh oh, if you reached here, you better run.')
時にはそれがうまく機能することもあります。そのため、そこから離れすぎないようにする場合は、少なくともVisionmediaのデバッグを使用してログにブリンブリンを追加してください。
コンソールロギングは便利ですが、専門的にデバッグするには、ブレークポイントを設定し、コードをステップ実行し、スコープと変数を調べて、その奇妙な動作の原因を確認する必要があります。他の人が述べているように、ノードインスペクターは実際にはミツバチの膝です。組み込みのデバッガーで実行できるすべてのことを実行しますが、使い慣れたChromeDevToolsインターフェイスを使用します。私のようにWebstormを使用している場合は、そこからデバッグするための便利なガイドがあります。
デフォルトでは、イベントループ(ティック)のさまざまなサイクルにわたる一連の操作を追跡することはできません。これを回避するには、longjohnを見てください(ただし、本番環境ではありません!)。
Node.jsを使用すると、サーバープロセスをかなりの時間稼働させることができます。それがいくつかの厄介なリークを引き起こしたと思う場合、あなたはどうしますか?heapdumpとChromeDevToolsを使用して、いくつかのスナップショットを比較し、何が変更されているかを確認します。
いくつかの有用な記事については、チェックしてください
あなたがビデオを見たいと思うなら、
どのパスを選択する場合でも、デバッグ方法を理解していることを確認してください
自分の悩みを見て、自分だけで
誰もやっていないこと を知るのは辛いことですソポクレス、Ajax
テセウスはアドビの研究によるプロジェクトであり、オープンソースエディターのブラケットでNode.jsコードをデバッグできます。リアルタイムのコードカバレッジ、遡及検査、非同期呼び出しツリーなど、いくつかの興味深い機能があります。
Visual Studio 2012または2013用のNode.jsツールには、デバッガーが含まれています。ここでの概要には、「VisualStudio用のNode.jsツールにはノードアプリのデバッグの完全なサポートが含まれています」と記載されています。Node.jsは初めてですが、.NETのバックグラウンドを持っているので、このアドインはNode.jsアプリケーションをデバッグするための優れた方法であることがわかりました。
Visual Studio Codeは、Node.jsのデバッグを非常によくサポートしています。これは無料のオープンソースでクロスプラットフォームであり、Linux、OS X、およびWindowsで動作します。
必要に応じて、うなり声やgulpタスクをデバッグすることもできます...
安定していて非常に単純なNode.jsコードをデバッグするための別のアプローチを作成しました。https://github.com/sa/iron-nodeで入手できます。
オープンソースのクロスプラットフォームビジュアルデバッガー。
インストール:
npm install iron-node -g;
デバッグ:
iron-node yourscript.js;
私はあなたを助けることができる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()
Atom IDEを使用している場合は、node-debugger
パッケージをインストールできます。
Node.js内には組み込みのコマンドラインデバッガクライアントがあります。Cloud 9 IDEには、非常に優れた(ビジュアル)デバッガーもあります。
どこから始めればよいかわからない人のために、ノードインスペクターの使用に関する短いNode.jsデバッグ入門書をまとめました。
VisualStudioCodeはデバッグに役立ちます。
Webstormを使用してください!Node.jsアプリケーションのデバッグに最適です。デバッガーが内蔵されています。こちらのドキュメントを確認してください:https ://www.jetbrains.com/help/webstorm/2016.1/running-and-debugging-node-js.html
Node.js用の強力なロギングライブラリが必要な場合は、Tracerhttps://github.com/baryon/tracerの方が適しています。
タイムスタンプ、ファイル名、メソッド名、行番号、パスまたはコールスタックを含むログメッセージを出力し、カラーコンソールをサポートし、データベース、ファイル、ストリームトランスポートを簡単にサポートします。私は著者です。
コンピューターにnode-inspectorがインストールされていると仮定すると(そうでない場合は、「npm install -g node-inspector」と入力するだけです)、次のコマンドを実行する必要があります。
node-inspector & node --debug-brk scriptFileName.js
そして、コマンドラインからWebKit(Chrome / Safari)ブラウザーにURIを貼り付けます。
新しいオープンソースのNodeclipseプロジェクトがあります(EclipseプラグインまたはEnide Studioとして):
Nodeclipseは、2013年のEclipseトップ10の新しいプラグインで1位になりました。変更されたV8デバッガー(Java用のGoogle Chrome Developer Toolsから)を使用します。
Nodeclipseは、毎月初めにリリースされる無料のオープンソースソフトウェアです。
多くの可能性があります...
デバッグサポートは、多くの場合、v8デバッグプロトコルまたは新しいChromeデバッグプロトコルを使用して実装されます。
IntelliJはNode.jsで素晴らしい働きをします。
さらに、IntelliJは「コードアシスタンス」を適切にサポートします。
NetBeans IDEは、バージョン8.1以降Node.jsをサポートしています。
<...>
新機能のハイライト
Node.jsアプリケーション開発
- 新しいNode.jsプロジェクトウィザード
- 新しいNode.jsExpressウィザード
- 強化されたJavaScriptエディター
- Node.jsアプリケーションを実行するための新しいサポート
- Node.jsアプリケーションのデバッグの新しいサポート。
<...>
その他の参考資料:
このコマンドを使用する
DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect
ndbは、Chrome DevToolsによって有効化された、Node.jsの改善されたデバッグエクスペリエンスです。
node-debug -p 8888 scriptFileName.js
お気に入りのブラウザーデバッガーを使用して小さな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ビオラを押します。ブラウザでデバッグします。
他の回答で言及されていない別のオプションは、Rookoutと呼ばれるツールを使用することです。これは、ローカルアプリとリモートアプリの両方からデータをデバッグおよび取得するために使用されます。実稼働環境でデータを他のサービスに集約するために使用します-多くの頭痛の種とハードコードされたロギングを節約します
私の最初の応答は、数年前のプレビジュアルスタジオでした。
したがって、 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');
}
});
必要に応じて、純粋な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、ブラウザー)を使用することをお勧めします。あなたはここでもっと読むことができます。
[ファイル]->[設定]->[設定]->[自動接続の検索]を検索してオンに設定し、コンソール( + )を開くか、[ターミナル] -> [新しいターミナル]メニューから[ VSCode ]設定を有効にし、コードにブレークポイントを設定して、次のように入力しますコマンドctrl*
node --inspect <name of your file>
これによりデバッグが開始され、VSCodeに[デバッグ]メニューが表示されます。
注:自動接続は、ノードクラスターワーカースレッドを使用している場合にも非常に役立ちます。
デバッグする方法はたくさんありますが、私はノード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
WebStormでは、package.jsonファイルを開いて、そこからDEBUGモードでスクリプトを実行できます。側面にある緑色の再生ボタンをクリックするだけです。
IDEを使用せずにCLIから直接アプリケーションをデバッグする場合は、のようにスクリプトを実行できますnode index.js --inspect
。デフォルトでは、ポート5858でリッスンし、デバッガーに接続できるようにします。または、で別のポートを指定することもできます--inspect=5858
。
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);
NODE_OPTIONS="--require myInspector.js"
実際、これはWebStormがインスペクターを注入する方法でもあります。美しさは、どのランチャーを使用しても機能することです。したがって、.sh/.batファイルを使用することもできnpm run ...
ますnode-ts ...
。
Node.JSアプリケーションをデバッグする方法は次のとおりです。
1)devtoolをインストールし、それを使用してアプリケーションを起動します
npm install devtool -g --save
devtool server.js
これはChromeデベロッパーモードで開くので、デバッガーポイントを配置してテストできます。
2)ノードインスペクターでデバッグする
node-inspector
3)--debugを使用してデバッグする
node --debug app.js
試してみることができます-エラーをキャッチします:
function yourFunc() {
try {
// YOUR CODE HERE
} catch (err) {
console.error(err.message + ", " + err.trace);
}
}
エラーメッセージとエラートレースは、実行時のバグを特定して修正するために必要な情報を提供します。