Node.js v0.11.11 マニュアル & ドキュメンテーション


Debugger#

Stability: 3 - Stable

V8は外部プロセスから TCP プロトコル経由で接続可能なデバッガを備えています。 Node にはこのデバッガへのクライアントが組み込まれています。 これを使うには、 debug 引数を指定して Node を起動します。 次のようになります:

% node debug myscript.js
< debugger listening on port 5858
connecting... ok
break in /home/indutny/Code/git/indutny/myscript.js:1
  1 x = 5;
  2 setTimeout(function () {
  3   debugger;
debug>

Node のデバッガクライアントはあらゆるコマンドを完全にサポートしているわけではありませんが、 単純なステップ実行やインスペクションが可能です。 スクリプトのソースコードに debugger; 文を挿入すると、 ブレークポイントが有効になります。

例えば、myscript.js が次のようだとします:

// myscript.js
x = 5;
setTimeout(function () {
  debugger;
  console.log("world");
}, 1000);
console.log("hello");

ひとたびデバッガを実行すると、4行目で中断します。

% node debug myscript.js
< debugger listening on port 5858
connecting... ok
break in /home/indutny/Code/git/indutny/myscript.js:1
  1 x = 5;
  2 setTimeout(function () {
  3   debugger;
debug> cont
< hello
break in /home/indutny/Code/git/indutny/myscript.js:3
  1 x = 5;
  2 setTimeout(function () {
  3   debugger;
  4   console.log("world");
  5 }, 1000);
debug> next
break in /home/indutny/Code/git/indutny/myscript.js:4
  2 setTimeout(function () {
  3   debugger;
  4   console.log("world");
  5 }, 1000);
  6 console.log("hello");
debug> repl
Press Ctrl + C to leave debug repl
> x
5
> 2+2
4
debug> next
< world
break in /home/indutny/Code/git/indutny/myscript.js:5
  3   debugger;
  4   console.log("world");
  5 }, 1000);
  6 console.log("hello");
  7
debug> quit
%

repl コマンドはコードをリモートで評価します。 next コマンドは次の行にステップオーバーします。 他にもいくつかのコマンドを利用することができます。 その他については help をタイプしてください。

Watchers#

デバッグ中に式や変数の値をウォッチすることができます。 全てのブレークポイントにおいて、ウォッチリストのそれぞれの式は 現在のコンテキストで評価され、ブレークポイントのソースコードの前に 表示されます。

式のウォッチを開始するには、watch("my_expression") をタイプします。 watchers はアクティブなウォッチの一覧を表示します。 ウォッチを解除するには、unwatch("my_expression") とタイプします。

Commands reference#

Stepping#

  • cont, c - 実行を継続します。
  • next, n - 次の行へステップオーバーします。
  • step, s - ステップインします。
  • out, o - ステップアウトします。
  • pause - コードの実行を中断します (Developer Tools の pause ボタンと同じです。

Breakpoints#

  • setBreakpoint(), sb() - 現在行にブレークポイントを設定します。
  • setBreakpoint(line), sb(line) - 指定した行にブレークポイントを設定します。
  • setBreakpoint('fn()'), sb(...) - 指定した関数の先頭行にブレークポイントを設定します
  • setBreakpoint('script.js', 1), sb(...) - 指定したスクリプトファイルの指定した行にブレークポイントを設定します。
  • clearBreakpoint, cb(...) - ブレークポイントを削除します。

まだロードされていないファイル (モジュール) にブレークポイントを 設定することもできます。

% ./node debug test/fixtures/break-in-module/main.js
< debugger listening on port 5858
connecting to port 5858... ok
break in test/fixtures/break-in-module/main.js:1
  1 var mod = require('./mod.js');
  2 mod.hello();
  3 mod.hello();
debug> setBreakpoint('mod.js', 23)
Warning: script 'mod.js' was not loaded yet.
  1 var mod = require('./mod.js');
  2 mod.hello();
  3 mod.hello();
debug> c
break in test/fixtures/break-in-module/mod.js:23
 21
 22 exports.hello = function() {
 23   return 'hello from module';
 24 };
 25
debug>

Info#

  • backtrace, bt - 現在の実行フレームのバックトレースを表示します。
  • list(5) - 現在の行の前後のソースコードを表示します (例では前後とも 5 行が表示されます)。
  • watch(expr) - 式をウォッチリストに追加します。
  • unwatch(expr) - 式をウォッチリストから削除します。
  • watchers - ウォッチしている全ての式とその値を表示します (各ブレークポイントで自動的に表示されます)。
  • repl - デバッグしているスクリプトをコンテキストとする REPL を開きます。

Execution control#

  • run - スクリプトを実行します (デバッガを開始すると自動的に実行します)。
  • restart - スクリプトを再実行します。
  • kill - スクリプトを終了します。

Various#

  • scripts - ロードされている全スクリプトの一覧を表示します。
  • version - v8 のバージョンを表示します。

Advanced Usage#

V8 デバッガは Node をコマンドラインの --debug フラグで起動したり、起動済みの Node プロセスに SIGUSR1 シグナルを送ることでも有効にできます。

これによって一度デバッグモードに設定されたプロセスは、 pid または URI のどちらでも node デバッガに接続することができます。 形式は:

  • node debug -p <pid> - pid を通じてプロセスに接続
  • node debug <URI> - localhost:585 のような URI を通じてプロセスに接続