Node.js 組み込みデバッガーを使用してデバッグする

完了

デバッグは複数の段階から成るアプリケーションですが、通常は次のようなステップになります。

  1. プログラムのバグを特定します。
  2. バグがコード内のどこにあるかを突き止めます。
  3. バグが発生した理由を分析します。
  4. バグを修正します。
  5. 修正が機能していることを確認します。

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>