Posted at

【Node.js】IntelliJでNode.js(Express)アプリの「リモート」デバッグ【IntelliJ】

More than 5 years have passed since last update.


想定環境


  • 「リモート」デバッグというところがポイント

  • 仮想開発環境(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のマニュアル(英語)にちゃんと書いてあります。

英語が苦手なので飛ばし飛ばし読んでたら、みごとにポートフォワーディングの箇所をすっ飛ばして読んでました。反省。