DRY

Web関連の技術の事、食事/お酒の事、旅行の事など

node-inspectorとnode-devでnode.jsをデバックする方法

まだ慣れが無くてついつい忘れてしまうので、自分への備忘録も含めて

以前からのエントリの通り、node.jsが動いているサーバはMacBookAir上のVMWareFusion上のCentOS5.6なので、Mac⇔Centでnatも入っているのでそこも記載。
※そんなメンドくさくない、普通の環境の人の(例えばMAC上のみで動かしてます。みたいな)場合、NATの部分を読み飛ばして貰えれば
後は同じ事です。


まずは、CentOS上でnode-inspectorとnode-devの起動

# node-inspector &
[1] 31641
# visit http://0.0.0.0:8080/debug?port=5858 to start debugging

# node-dev --debug hogehoge.js
4 Jul 17:25:50 - [INFO] Started
debugger listening on port 5858

node-inspectorはバックグラウンドで起動すれば良いみたいで、node-devはプラスのデバッカーとして。
(意味があるかわからないけど、ずっとnode-devで起動していたので名残が・・・)

今回の「hogehoge.js」ファイルのlistenポートは8124にしているので、上のinspectorと含めて8080+8124をnat(確認)しておく
以下はMacBookAirにて(CentOSのIPは下記の通り192.168.8.128)

# sudo su -
root# cd /Library/Application\ Support/VMware\ Fusion/
root# cd vmnet8
root# vi nat.conf

[incomingtcp]
8080 = 192.168.8.128:8080
8124 = 192.168.8.128:8124
2222 = 192.168.8.128:22
※natしたいポートが記載されているか確認できれば、VMWareのrestart

root# ../boot.sh --restart

上記設定により、正しくnatされていれば「http://MacのIP:8080/debug?port=5858」でchromeでnode-inspectorが起動するはず
※この時MacのIPは「172.21.36.143」


後は、node-inspectorが起動している画面で、ブレークポイントを張りたい場所の行番号をクリックしてブレークポイントを設定し、
別のタブにて「http://172.21.36.143:8124」にアクセスして、ブレークポイントの箇所まで動かせばOK!


ただ、これ毎回やるのメンドくさいし。。。多分こういうのってポートとかってそんなに変わらないだろうし。
と言う事で、こいつのシェルスクリプト作って、その.shをコマンドでalias登録しておこう。


#mkdir /x
#vi /x/node.sh

                                                            • -

#!/bin/sh
/usr/local/bin/node-inspector &
node-dev --debug $1

                                                            • -

#chmod 775 /x/node.sh
#/x/node.sh hogehoge.js
#ps axu | grep node

>root 2023 /bin/sh ./node.sh hogehoge.js
>root 2024 node /usr/local/bin/node-inspector
>root 2025 node /usr/local/bin/node-dev --debug hogehoge.js
>root 2027 node --debug /usr/local/lib/node_modules/node-dev/wrapper.js hogehoge.js

と言う事で、引数に起動したい.jsを渡してnode.shを叩くと無事node-inspectorとnode-dev --debugで起動

最終的にこのシェルスクリプトをコマンドとしてaliasしておく。

#vi ~/.bashrc
alias nodedebug='/x/node.sh'
※1行追記

source ~/.bashrc
#nodedebug hoge.js

無事起動。