breakpointerマジ便利

仕事を休んだので、一日中Railsの勉強してました。10時間はやったと思います。
その甲斐あって、アプリの雛形は完成。見た目がしょぼいとか、ゲーム状態制御が甘いとか、AJAX投げすぎて激重とか、色々問題点はありますが、身内で使う分には近いうちに実用化できそう。
今日はバリバリ書いたのですが、コードが酷すぎてお見せできる状態ではないので、Rails用デバッガbreakpointerの使用方法を書いておこうかと思います。


自分はRailsもRubyもほとんど知らないので、しょぼいミスではまっていることが多いです。ハッシュも全然分かってなくて、ハッシュparamからnameをキーに値を取り出す際に

params[:name]

とか

params["name"]

とか書いてしまう腕前です。
正解は

params['name']

っぽいです。未だによく分かってませんが、値は取れました。型変換が数回実行されてパフォーマンス悪すぎ、という可能性はあります。
C言語なら存在しない変数にアクセスするとエラーが起きるのですが、Rubyは変数宣言がないため、エラーになりません。
AJAX多用してるんで、出力によるデバッグも出来ないし、と参ってデバッグ方法を探したところ、Rails標準のbreakpointerというツールが見つかりました。
これ、使い方もカンタンでめっちゃ便利です。
まずbreakpointerを起動。定期的にデバッグ用ポートに接続をトライし、接続できた場合、対話型Rubyインタプリタirbとアタッチしてくれるようです。

ruby script/breakpointer

んで、WEBrickを起動。

ruby script/server

最後にデバッグしたい箇所に”breakpoint”を追加

answer = Answer.find( 1 )
breakpoint
if answer.person_id == params['person'].to_i &&
answer.weapon_id == params['weapon'].to_i &&
answer.place_id  == params['place'].to_i
Message.add_system_message( "正解です" )
else
Message.add_system_message( "間違いのようでありますよ" )
end

これでbreakpointの行が実行されると、WEBrickの実行が止まり、デバッグ用ポートでLISTENを開始。定期的にbreakpointerがACCEPTを試みているので、接続。その後は、irbでデバッグ可能となります。

Executing break point at ./script/../config/../app/controllers/admin_controller.rb:104 in `answer'
irb(#):001:0>

変数内容の表示は変数名を書くだけ。

irb(#):001:0> params
=> {"place"=>"6", "commit"=>"隗」遲・, "action"=>"answer", "controller"=>"admin",
"weapon"=>"1", "person"=>"6"}
irb(#):002:0>

UTF8で送っているので化けてます。コマンドラインツールなので、Windowsの制限でShiftJISしか表示できません。これはしょうがないところ。Linuxにしたくなる瞬間ですな。
使い終わったら、Ctrl+Zかexitで切断。
ただAJAXだとこの間も非同期呼び出しが送られ続けており、WEBrickがキュー詰まりを起こしているようで不安定になってしまいます。これはbreakpointerの欠点ではないです。しょうがないので、再起動してます。
こんな感じでかなり便利だと思うのですが、いかがでしょうか?

シェアする

  • このエントリーをはてなブックマークに追加

フォローする