EclipseでJRubyをデバッグ実行

みんな平然とビルド&実行してるっぽくて泣きそう

  • antインストール
    • 公式からzip落として適当に解凍、環境変数"ANT_HOME"を設定
    • ついでにjarをビルドしておく
  • 実行時のVMオプションは以下
-Djruby.memory.max=500m
-Djruby.stack.max=2048k
-Djruby.home=${workspace_loc:JRuby}
-Djruby.lib=${workspace_loc:JRuby}/lib
-Xmx500m
-Xss2048k
-Xbootclasspath/a:${workspace_loc:JRuby}/lib/jruby.jar
-Djffi.boot.library.path=${workspace_loc:JRuby}/lib/native/x86_64-Windows:${workspace_loc:JRuby}/lib/
-Djruby.script=jruby

実行中のjrubyプロセスをpsで覗いたんだけど端末の設定が腐ってるのか見切れたところが押り返し改行されてなくてオプション足りてないのに気づけなかった
デバッグするのにビルド済みjruby.jarが必要になるなんて絶対間違ってる

ショートカットおよびコード編集Tips

ずいぶん前に書いた記事にいろいろ加筆

カーソル移動・コードブラウズ

F3:Open Declaration

選択している?JavaElementの定義を開く.クラスならクラスの定義の,フィールドならフィールドの定義の場所にカーソルがあった状態で開く.

F4:Open Type Hierarchy

選択している?JavaElementの型階層を表示する.親のみ,子のみ,両方などが指定できる.階層の中から型を選んでF4を押すことで,選択した型についての階層を見ることができる.

C-t:Quick Hierarchy

選択している?JavaElementの型階層がHierarchyがポップアップ。C-oと同じく文字入力でフィルタリングできて,Enterで定義にジャンプする.F4と違い,メソッドにフォーカスがあたっていると,メソッドのオーバーライドの階層が表示される.

C-o:Quick Outline

Outlineがポップアップ。文字入力でフィルタリングができて、Enterで定義にジャンプ.ワイルドカード‘*’が使える.メソッド,フィールドへの移動に便利.F3と違って定義に飛びたい?JavaElementの使用箇所が近くに見当たらないがない場合に重宝する.

C-R:Open Resource

Workspace内のリソースを開く。クラスファイルを開くならPackage Explorerで探して開くより早い場合が多そう。Emacsバインドだと普通にC-x C-f. リソース名にはワイルドカード‘*’が使える.

M-Q key:Show View

任意のビューにフォーカスを合わせるためのコマンド。keyによってフォーカス先が変わる。例外として、‘q’だとShow Viewダイアログが出る。よく使いそうなのは

C-M-h:Open Call Hierarchy

フォーカスしてる?JavaElementの呼び出し階層が開く。マウスによりcallee(メソッドが読んでるメソッド), caller(メソッドを読んでいるメソッド)の変更が可能である。'C-.', 'C-,'で前/次の検索結果に移動できる。ジャンプとは言っても、フォーカスは検索ビューにあたったままなのでSwitch to editorのショートカットを設定しておくとそのまま編集に移れて便利

C-G:References in Workspace

フォーカスしてる?JavaElementを参照している箇所を検索する.F3の逆と考えればいい?。C-M-hと同様に'C-.', 'C-,'で検索結果間の移動が出来る

C-E:Switch to Editor

エディタにフォーカスが移る.M-Gとかでフォーカスが移動したあとにエディタに戻りたいときに使う

C-, (C-.):次(前)のエラーに移動

そこでF2もしくはC-1(Quick Fix)が便利。検索結果間の移動も同じショートカットが使える

C-P:

対応するカッコに移動する

C-j (C-J):Incremental find (Incremental find reverse)

インクリメンタルサーチ.ポップアップなしで検索する.カーソル移動に便利

C-PageUp (C-PageDown)

一般的なタブ切り替えショートカットが使える

コード編集

C-Space:Content Assist

JDTがよきに計らってくれます.EmacsバインドならM-/

C-F:Format

ソースコードのフォーマットを整える.

C-O:Organize Imports

importを最適化する.

C-1:Quick Fix

エラーの修正方法一覧がポップアップする.C-, などでエラーにフォーカスをあててから使う.

M-r:Rename

リファクタリング.現在フォーカスしている?JavaElementの名前を変更する。コピペ後の処理に最適

デバッグ

C-F11:Run

通常実行.実行されるConfigurationは設定によって『直前にRunおよびDebugしたもの』か『エディタでフォーカスしているリソースを含むもの』のどちらかである.

F11:Debug

デバッグ実行.実行されるConfigurationは設定によって『直前にRunおよびDebugしたもの』か『エディタでフォーカスしているリソースを含むもの』のどちらかである.

C-F2:Stop

デバッグを中止

  • F5, F6, F7, F8:ステップ実行とか
  • F5:メソッド呼び出しがあった場合,その定義に移動する
  • F6:メソッド呼び出しをそのまま通り越す
  • F7:ひとつ上のスタックに戻る
  • F8:ブレークポイントか終了するまで実行する
C-B:Toggle Break Point

現在の行にブレークポイントを設定する

Tips

既存クラスへのメソッド追加を3倍加速する(静的Method missing)

一体何度コンテントアシストを叩かなければならないのかわからないほどメソッドの定義はめんどくさいですよね禿げそうです。Eclipseのおせっかい機能を使ってこのわずらわしさを大幅に軽減します。もちろん、同様の小技はクラスやフィールドにも適用できます

  • こんなクソコードがあります。このクラスに新しくinit(float x, float y, float z, int type, String str)と、文字列を引数にとるinit()を追加したいと思いました。あくまで例なので意味はないです

  • おもむろに呼び出すコードを書きます。もちろん怒られます

  • 怒られた場所に'C-,'で移動し、'C-1'でQuickFixを呼び出します。ここでCreate methodを選択します

  • メソッドのスケルトンが生成されます。識別子が四角で囲まれていますが、これはTabやC-iで移動することができます。一度Tab(C-i)を押した後の状態が次のスクリーンショットです

変数名書くのだりーときの対処

変数名は一見して何をするのかわからないといけませんが、勢いに乗ってコード書いてるときに一々考えるのは面倒ですよね。長くなると、補完があるとはいえタイプも面倒です。そういうときは迷わず一文字変数を使いましょう。頭が冷えた時に落ち着いて名前を考えて、M-rによるリネーム機能で置き換えればいいのです。もちろん放置は厳禁です

Earth Defense Force: Insect Armageddon

Steamで$14.99だったので購入
開発元はSANDLOTじゃない。EDFの名を冠してはいるけど、せいぜいコンセプトが似てる程度でほとんど別物

  • マップが狭い/見通しが悪い。引き撃ちができない
  • 〜中距離戦しかない。地平線の彼方からわらわら出てくる敵の進撃を、じりじりと前線を下げながら耐えるステージは一切ない
  • 敵が少なくて硬く、一撃で倒すことができない。少ないといっても多いことは多い
  • タクティカルファイアができない
  • スナイパーライフルがズームしないと弾が散る。スナイパーライフルが残念
  • ヘクトルがノックバックしづらくなった上に、全固体がマシンガン+レーザー砲固定になった。攻撃時には逃げるしかない
  • 死んでも味方の蘇生で全回復する上にリスクがない。緊張感がない
  • 一ステージが長すぎる。出現パターンが「アクティブな敵が中距離以下で沸く」しかなくてメリハリがなく、だれる
  • 爽快感がない
    • 射撃音が小さくて撃ってる感じがしない
    • 着弾エフェクトが小さくて当たってる感じがしない
    • 爆風エフェクトが薄っぺらくて爆発してる感じがしない
    • ただしミサイルのエフェクトはかっこいい
  • レベルの概念がある。武器に装備可能レベルが設定されてるせいで強武器を装備するために稼ぎが必要。加えて一ステージが長い。マゾい

本家のINFERNOを知らない人が、NORMAL・HARDあたりの印象だけで作った結果に見える。オンラインCOOP対応のために大量の敵同時湧きはオミット、処理落を起こす過剰なパーティクルで表現されたエフェクトもオミット
別ゲーとして見るならそこまでひどいわけでもない。ネットコードは優秀で、ラグやワープはまったくない。PC版だと処理落ちもなくて、(エフェクトしょぼいけど)処理落ちなしの夢が実現している
PC版はSplitScreenできない?