JavaScript のデバッグについてまとめる。
端末や画面に変数や式の値を表示させるのは古典的な方法である。ブラウザに表示させる alert() 関数はよく用いられてきたが、 Node.JS のようにブラウザを使わない JavaScript 処理系のことを考えれば、console.log() 関数がよい。 console.log()(developer.mozilla.org) を参照のこと。 また、表形式でひょうじさせるためには、console.table() 関数が便利だ。 console.table()(developer.mozilla.org) が参考になる。
デバッガが使える環境にあれば、alert() や console.log() を使わずとも、debugger という文を追加することで同様のことができる。 デバッガを使っている状態で起動すると、実行は debugger 文の場所で停止する。
ソースコードに変更を加えないデバッグも可能だ。端末上のデバッグや、エディタベースのデバッグ、ブラウザベースのデバッグがある。
Node.js でデバッグする例を述べる。この場合の端末上のデバッグとは、コマンドラインのデバッグと同じことだ。詳しくは下記を(英語)参照。
https://nodejs.org/dist/latest-v18.x/docs/api/debugger.html
以下、saluton.js という JavaScript のプログラムをデバッグしよう。saluton.js は次の通りである。
const a = "Saluton"; const b = a.concat(", mondo!");
デバッグ例は次のとおりである。
PS C:> node inspect .\saluton.js (node:18648) ExperimentalWarning: AbortController is an experimental feature. This feature could change at any time (Use `node --trace-warnings ...` to show where the warning was created) < Debugger listening on ws://127.0.0.1:9229/cf99f4d8-9c39-47ec-afc2-40939a3e6613 < For help, see: https://nodejs.org/en/docs/inspector < ok < Debugger attached. < Break on start in saluton.js:1 > 1 const a = "Saluton"; 2 const b = a.concat(", mondo!"); 3 debug> sb(1) > 1 const a = "Saluton"; 2 const b = a.concat(", mondo!"); 3 debug> sb(2) * 1 const a = "Saluton"; > 2 const b = a.concat(", mondo!"); 3 debug> watch('a') debug> watch('b') debug> s break in saluton.js:2 Watchers: 0: a = 'Saluton' 1: b = undefined * 1 const a = "Saluton"; > 2 const b = a.concat(", mondo!"); 3 debug> s break in saluton.js:2 Watchers: 0: a = 'Saluton' 1: b = 'Saluton, mondo!' * 1 const a = "Saluton"; > 2 const b = a.concat(", mondo!"); 3 debug> .exit PS C:\>
以下、デバッガのコマンドを説明する。
ブレークポイントのたびに、式や変数の値をウォッチ(確認)することができる。my_expression という式をウォッチするには、 watch('my_expression')とタイプする。ウォッチをやめるには、unwatch('my_expression')とタイプする。
次のコマンドがある。
cont
, c
: 実行継続next
, n
: 次のステップstep
, s
: ステップインout
, o
: ステップアウトpause
: 実行コードの一時停止(開発者ツールのポーズボタンと同様)以下の例で、sb(), cb() はそれぞれ setBreakpoint(), clearBreakpoint() の略記法である。
sb()
: 現在行にブレークポイントを設定するsb(line)
: 指定の line にブレークポイントを設定する。line は行数sb('fn()')
: 指定した関数 fn() の本体1行めにブレークポイントを設定するsb('script.js', 1)
: script.js
の 1 行目に条件付きブレークポイントを設定する。sb('script.js', 1, 'num < 4')
: script.js
の 1 行目に条件付きブレークポイントを設定する。
条件は num < 4
が true
と評価されるときのみである。cb('script.js', 1)
: script.js
のブレークポイントをクリアする
on line 1まりんきょ学問所 > JavaScript 手習い > デバッグのヒント