Node.js デバッガの基本的な使い方
Node.js にはビルトインのデバッガが組み込まれています。このため、特別なデバッガを利用することなく 直ちに基本的なデバッグコマンドを用いてデバッグ作業を行うことができます。
詳細なコマンドについては、本家リファレンスを見ていただくことにして、 ここでは基本的なデバッグコマンドの使い方をざっとみてみましょう。
単純なコマンドだけでも、知っているのと知らないのでは大違いです。
Node.js デバッガ上でのスクリプトの実行
スクリプト index.js をデバッガ上で実行するには次のコマンドです。
$ node inspect index.js
すると、プロンプトが debug> に変わります。
Node.js デバッガでのブレークポイントの設定
ブレークポイントを設定するには sb(ファイル名, 行番号) とします。
例えば、スクリプト index.js の 10 行目にブレークポイントを設定するには次のようにします。
debug> sb('index.js',10)
設定したブレークポイントの一覧を表示するには、breakpoints コマンドです。
ブレークポイントの解除(クリア)は cb(ファイル名, 行番号) です。
現在のスクリプトの場合はスクリプト名は省略可能です。
debug> breakpoints
#0 index.js:10
関数に入ったところでブレークしたい場合は、関数内の一行目を指定すると良いです。
function で作成した関数は、 function キーワードの行をブレークポイントに指定しても、関数内部の一行目にブレークポイントが設定されます。 しかし、定数に割り当てたアロー関数などは、ファットアローの行にブレークポイントを設定すると定数への代入行がブレークします。
Node.js デバッガでの処理の実行、ステップ実行、ステップインなど
処理を継続するには c コマンドです。
debug> c
break in index.js:10
1 行毎の実行 「ステップ実行」 は、次の行ということで n (next) です。
関数に入る「ステップイン」は s です。
関数から出る「ステップアウト」 は o (out) です。
スクリプトのリスタートは run です。デバッグセッションを継続している場合、ブレークポイントなどは保存されたままです。
Node.js デバッガでのコードの表示、変数の評価、ウォッチリストなど
現在の停止位置前後のコードを表示するには list(行数) です。例えば前後 5 行を表示するなら次のようにします。
debug> list(5)
ブレークした時に変数の値などをチェックしたい場合は、repl コマンドで評価プリントループのモードに入って、即値の確認ができます。
次の例では REPL で変数 m と n の値をチェックしています。REPL から抜けるには Ctrl + C です。
debug> repl
Press Ctrl + C to leave debug repl
> m
10
> n
5
debug>
watch() コマンドでウォッチリストにチェックしたい変数を入れておくことができます。 ウォッチ中の値は watchers コマンドで一括表示できます。
debug> watch('m')
debug> watch('n')
debug> watchers
0: m = 10
1: n = 5
debug>
コールスタックのバックトレースを表示するには bt です。
debug> bt
#0 (anonymous) index.js:10:8
#1 Module._compile internal/modules/cjs/loader.js:956:13
#2 Module._extensions..js internal/modules/cjs/loader.js:995:9
#3 Module.load internal/modules/cjs/loader.js:815:31
#4 Module._load internal/modules/cjs/loader.js:727:13
#5 Module.runMain internal/modules/cjs/loader.js:1047:9
#6 (anonymous) internal/main/run_main_module.js:17:10
debug>
Node.js デバッガ、その他のコマンド
上記デバッガコマンドを忘れた時には、もちろん help で確認できます。
また、デバッガのセッションを終了するには .exit です。
以上、Node.js のビルトインのデバッガコマンドについて使い方を説明しました。 たったこれだけでも、console.log でプリントしまくるよりは、ずっとスマートに問題解決できるはずです。ぜひ覚えてしまいましょう。