読者です 読者をやめる 読者になる 読者になる

WebStormから実行したNode.jsのサーバーの自動再起動に応じてデバッガのセッションも再接続させたい。がッ・・駄目ッ・・!

前段

HTTPサーバー内蔵したウェブアプリで、フツーにNode JS Script の実行設定で server.jsを指定してデバッグ実行するぶんには問題ないんだけど、ファイル編集毎にサーバー再起動させてソース反映させたい。

そうするとnode-devとかsupervisorとかgruntのserverタスクとか経由で実行するんだけど、WebStormから見たら

~/.nodebrew/current/bin/node --debug-brk server.js 

じゃなくて

~/.nodebrew/current/bin/node --debug-brk ~/.nodebrew/current/bin/node-dev server.js 

というコマンドを実行していることになる。

そうするとデバッガに待受けて接続して実行する対象が server.js とそこから読み込むソース群じゃなくてnode-dev のJavaScriptソースとそこから読み込むchild_processやコアライブラリだけが対象になってしまう。

これだとserver.js内にブレークポイントはっても反応しなくて、この問題をどうやって解決すればいいんだと試行錯誤してみた過程。

解説

だとデバッグ実行もできてなんか更新後にリスタートもするんだけどサーバーの待受けが死んでる……

(なぜ……)

こういう手もあるんだけど、

となってこれが前述したnode-dev自体のデバッグ実行になってしまう。のでserver.jsにブレークはれない

(server.jsがない……)

まずこうする。で、これをデバッグなしで実行する。とnode-dev経由でフラグが渡る

node-devにデバッグフラグのコマンドラインオプションがつきデフォルトの5858ポートで待受している

そもそもnode-devやsupervisorにパスを通せば、これでもいい。

この場合WebStormのデバッグ実行をしてしまうと --debug-brk=53848 --debug server.js っていう引数になっちゃってステップ実行できなくなる。

--debugと--debug-brkの違いはよくわかってないんだけッデバッガの接続を待ってるとかなってないとか? → https://github.com/joyent/node/wiki/Using-Eclipse-as-Node-Applications-Debugger

ので非デバッグ実行でかつ、リモートデバッグの設定をして他のタスクから接続する。

Node JS Remote Debug の設定をする

ブレークできた

が…… この後、ソースを更新してserver.jsが再実行されるとデバッガの接続セッションが見失うのかブレークしなくなる。

Node JS Remote Debug を手動で再実行すればまたブレークポイントで停止する。

とりあえずできたのはここまで。

今はサーバー自動再起動はできているけど、デバッガの再接続が自動化できていない状態。

あとWebStorm、別のOSの作業環境ごとにプロジェクト設定共通化できなくてだるいっすね……