GrailsをIntellijからリモートデバッグする

いまだにprintfデバッグを卒業出来ません。

そんなことはどうでもよくてリモートデバッグしてみる。山本さんの
http://d.hatena.ne.jp/mottsnite/20120705/1341495778
に書いてあるとおり2.1からデバッグする際は-debugオプションを使ったほうが良いとのこと。

そもそもIntellijからデバック起動すればいいじゃんって話はあるけど、IDE上からgrailsコマンド実行するとすごい動作が遅いし、操作性もあまり良くなく、結構つらいのでコマンドラインでgrailsコマンド使いつつIntellijでリモートデバッグするという方法を試してみる。

debugオプションの使い方は以下の様な感じ。

grails -debug
grails -debug run-app
grails -debug test-app

インタラクティブモードでも問題ありません。注意としては-debugはgrailsの次に書くこと。

grails run-app -debug

とかだとダメ(2.1.1現在)。で実行してみると以下のようになります。

$ grails -debug                                                                                                                                                                                                                     
Listening for transport dt_socket at address: 5005

5005で待ち受け状態になるでこの状態でIntellijからつなぐ。runメニューの "Edit Configurations..." を選択。

f:id:yamkazu:20121020232752j:plain

"+"ボタンをクリックしてremoteを選択。

f:id:yamkazu:20121020232753j:plain

適当な名前つけて保存。

f:id:yamkazu:20121021010137j:plain

runメニューから今作ったリモートを選択してdebug実行。

f:id:yamkazu:20121021010148j:plain

そうするとコンソールの方で出力が進む。

$ grails -debug                                                                                                                                                                                                                     
Listening for transport dt_socket at address: 5005
| Enter a script name to run. Use TAB for completion: 
grails> 

あとはIntellij側でブレイクポイントを設定して

f:id:yamkazu:20121020232816j:plain

コンソール側でrun-appなりtest-appなりすればブレイクポイントで止まってくれる!
意外と簡単!