Node.js 組み込みデバッガーを使用してデバッグする
デバッグは複数の段階から成るアプリケーションですが、通常は次のようなステップになります。
- プログラムのバグを特定します。
- バグがコード内のどこにあるかを突き止めます。
- バグが発生した理由を分析します。
- バグを修正します。
- 修正が機能していることを確認します。
Node.js プログラムでエラーを特定した後、最初に直面する課題は、エラーがコードのどこで発生しているかを突き止めることです。 これを実現する最も効率的な方法の 1 つは、コードをステップ バイ ステップで実行して、問題が発生した箇所を把握することです。
ブレークポイント
プログラムに何千行ものコードが含まれている場合、"すべて" のコードをステップ バイ ステップで実行すると、非常に効率が悪くなる可能性があります。 その場合は、ブレークポイントを使用できます。 これにより、プログラムの通常の実行から "ブレーク (切り離し)" して、コードの特定の "ポイント" で一時停止することができます。
ブレークポイントを使用すると、エラーが存在する疑いのあるコードの重要な部分に到達するまでプログラムを正常に実行できます。 次に、ステップ バイ ステップの実行に切り替えることができます。
デバッガーとコード エディターに応じて、コードにブレークポイントを定義する方法は複数あります。
Node.js 検査モード
デバッガーには実行環境へのフル アクセスがあるため、悪意のあるアクターがそれを使用して Node.js アプリケーションで任意のコードを挿入する可能性もあります。 そのため、既定では、Node.js によって実行中のプログラムをデバッグすることはできません。 デバッグを許可するには、"インスペクター" モードと呼ばれる特殊なモードを有効にする必要があります。
デバッガー "クライアント" がアプリケーションに自身をアタッチしてアプリケーションの実行を制御できるようにするには、--inspect
オプションを指定してアプリケーションを起動する必要があります。
既定では、--inspect
オプションを指定して Node.js を起動すると、ポート 9229
でホスト 127.0.0.1
をリッスンするようになります。 構文 --inspect=<HOST>:<PORT>
を使用してカスタム ホストとポートを指定することもできます。
重要
Node.js デバッガー ポートをパブリック IP アドレスまたは 0.0.0.0 にバインドしないようにしてください。 バインドすると、IP アドレスに接続できるすべてのクライアントが Node.js アプリケーションに接続し、制御する可能性があります。 そうすることで、攻撃者は実行環境で任意のコードをリモートで実行できます。 このような行為は、深刻なセキュリティ侵害につながる可能性があります。
別の方法として、--inspect-brk
オプションを使用することもできます。 このオプションは --inspect
と同じように機能しますが、コードの開始直前にコードの実行が中断されます。 これにより、デバッガーをアタッチし、時間をかけてブレークポイントを設定し、コードをステップ実行しながら問題の根本原因を特定できます。 デバッグが必要な場合は、次の --inspect-brk
スイッチを使います。
- 競合状態。
- 再現が困難な断続的な問題。
検査モードを有効にしてアプリケーションを起動すると、互換性のある任意のデバッガー クライアントを使用してアプリケーション プロセスに接続できます。
デバッガー クライアント
アプリケーションをデバッグするには、デバッガー クライアントを使う必要があります。 デバッガー クライアントは、Node.js アプリケーションに接続し、その実行を制御できるようにするプログラムです。 使用できるデバッガー クライアントは数多くありますが、最も一般的なものは次のとおりです。
- Visual Studio Code: Visual Studio Code にバンドルされているグラフィカル デバッガー クライアント。 開発中のデバッグ時に使用します。
- node-inspect:Node.js に付属しているコマンドライン デバッガー クライアント。 運用環境でデバッグするときにこれを使います。
組み込みのデバッガー
Node.js にバンドルされているコマンドライン デバッガー クライアントである node-inspect を使うと、Node.js アプリケーションをデバッグできます。 ブレークポイントを設定し、コードをステップごとに実行できるシンプルなデバッガーです。
node inspect <YOUR_SCRIPT>.js
node-inspect デバッガーによって、Node.js が検査モードを有効にした状態で実行され、統合された対話型デバッガーと同時に起動されます。 コードが開始される直前に、実行が一時停止されます。 デバッガーが正常に起動したことを示すプロンプトが表示されます。
node inspect myscript.js
< Debugger listening on ws://127.0.0.1:9229/ce3689fa-4433-41ee-9d5d-98b5bc5dfa27
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in myscript.js:1
> 1 const express = require('express');
2
3 const app = express();
debug>