28
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

想定環境

  • 「リモート」デバッグというところがポイント
  • 仮想開発環境(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 デバッグ設定作成

IntelliJ_IDEA__Cardea__IU-135_1019.jpg

Run_Debug_Configurations.jpg

Run_Debug_Configurations.jpg

あとは適当にブレークポイントを貼っておいて下さい。

デバッグしてみる

ゲストOSでアプリ起動

$ node --debug ./bin/www
debugger listening on port 5858

ホストOSからデバッガ接続

IntelliJ_IDEA__Cardea__IU-135_1019.jpg

ブラウザからアクセス

うまくいけば以下のようにちゃんとブレークポイントで止まるはずです。

IntelliJ_IDEA__Cardea__IU-135_1019.jpg

ハマったところ

ホストOSからゲストOSへデバッガが接続できない。

IntelliJで虫アイコンからリモートデバッグ開始した時に、デバッグコンソールが立ち上がると思うんですが、
そこで「Connected to localhost:5858」って出てないと、接続できてないことになります。
その場合、sshポートフォワーディングなどをもう一度見なおしてみてください。

参考

基本的にはIntelliJのマニュアル(英語)にちゃんと書いてあります。
英語が苦手なので飛ばし飛ばし読んでたら、みごとにポートフォワーディングの箇所をすっ飛ばして読んでました。反省。

Running_and_Debugging_Node_js.jpg

28
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?