想定環境
- 「リモート」デバッグというところがポイント
- 仮想開発環境(Linux)に、ホストOS上のIntelliJからデバッグできることがゴール
- 実験環境
- ホストOS Mac OSX 10.9
- ゲストOS CentOS 6.4 (Vagrant VirtualBox)
- node.js 0.10.29
- express 4.2.0
準備
IntelliJ プラグインインストール
Node.jsプラグイン入れて下さい(13.1 Ultimateで試しています)
node-inspector
コレです。
$ sudo npm install -g node-inspector
(sudo でやらないとエラーになったので)
expressアプリを、npm startじゃなく、nodeコマンドで立ち上げる。
$ node --debug ./bin/www
debugger listening on port 5858
listening ~ とか言われればOK。
sshポートフォワーディング
ホストOSから、ゲストOSのデバッグポートに直接繋げないので(localhostからの接続しか許可されていないっぽい)、
sshポートフォワーディングで外からつなぎます。
このへんを参考に、以下のようにホストOSからゲストOSへSSH接続します。
$ ssh f -N -L 5858:localhost:5858 [ゲストOS]
※ホストOSのポート5858番を、ゲストOSのポート5858番へ転送しています。
IntelliJ デバッグ設定作成
あとは適当にブレークポイントを貼っておいて下さい。
デバッグしてみる
ゲストOSでアプリ起動
$ node --debug ./bin/www
debugger listening on port 5858
ホストOSからデバッガ接続
ブラウザからアクセス
うまくいけば以下のようにちゃんとブレークポイントで止まるはずです。
ハマったところ
ホストOSからゲストOSへデバッガが接続できない。
IntelliJで虫アイコンからリモートデバッグ開始した時に、デバッグコンソールが立ち上がると思うんですが、
そこで「Connected to localhost:5858」って出てないと、接続できてないことになります。
その場合、sshポートフォワーディングなどをもう一度見なおしてみてください。
参考
基本的にはIntelliJのマニュアル(英語)にちゃんと書いてあります。
英語が苦手なので飛ばし飛ばし読んでたら、みごとにポートフォワーディングの箇所をすっ飛ばして読んでました。反省。