Play Framework 2.0 で Eclipse を使ってデバッグする

方法を知ったのがわりと後になってからだったので、早く知っとけばよかったなーという意味も込めて、
ちゃんとマニュアル読めば書いてあるはなしかもですけど、
Eclipse でのデバッグの方法をまとめておきますね。

1. Play! 起動時にデバッグコマンドで起動する

Windows で Play! サーバーを起動する場合、
次のようなコマンドを記載したバッチファイルを作っておけば便利です。

1行目の set _JAVA_OPTIONS=”-Dfile.encoding=SJIS” は、
Play! のエラーがコマンドプロンプトに表示されるときの文字化けを防いでくれます。
Java からのアウトプットが UTF-8 なので、何も設定しないと文字化けしちゃうんですよね。
かといって、次のようにコマンドプロンプト自体を UTF-8 にして

処理しようとすると、動作がとっても重くなって使い物にならないわけで。
コマンドプロンプトは cp932 のまま、Java 側のアウトプットを SJIS にするのが正解です。
なぜ cp932 でなくて SJIS か‥‥? この辺、追いかけ始めると結構面白そうですが‥‥。
とりあえず今のところ、うちの手元では SJIS で元気に動いてるから良しとしましょうか。

3行目では play debug run という風に、debug キーワードを追加して run しています。
実行するとプロンプトには以下のように表示されます

注目するのは

の1行です。

9999 番ポートでデバッグ用の dt_socket をリッスンしていますよーというメッセージ。
この 9999 番ポートを Eclipse のリモートデバッグで接続先として指定すると、
Eclipse のデバッグで socket を横取りしてデバッグできるという仕組み。
詳しい解説はここらへんかしら?

Play! 側で用意するのはこれだけです。

2. Eclipse 側でデバッグの設定

次は Eclipse 側です。
具体的には、Eclipse 上でこんな風に設定します。
まず、「実行」→「デバッグの構成」を開きます。
左ペインの「リモート Java アプリケーション」を右クリックし「新規」を選択。
play-debug-eclipse
こんな風に、接続プロパティーに「ホスト:localhost」「ポート:9999」を設定します。
設定ができたら右下「デバッグ」ボタンをクリック。

3. あとはいつものようにブレークポイントを設定して

4. Play! アプリを動作させるだけ

指定したブレークポイントでちゃんと停止して、デバッグパースペクティブを開けますし、
ステップ実行もできちゃいます。

デバッグを中止するときは、デバッグパースペクティブのデバッグビュー上の「切断」をクリック。
また、再度デバッグを行いたいときは、Eclipse の実行メニューの「ヒストリーのデバッグ」に、
さっき実行したデバッグの設定が残っています。

Play! アプリの開発も、デバッグさえできればこっちのものですよね!