2006年5月10日

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の欠点ではないです。しょうがないので、再起動してます。 こんな感じでかなり便利だと思うのですが、いかがでしょうか?

Trackback on "breakpointerマジ便利"

このエントリーのトラックバックURL: 

"breakpointerマジ便利"へのトラックバックはまだありません。

Comment on "breakpointerマジ便利"

"breakpointerマジ便利"へのコメントはまだありません。

Post a Comment

コメントする
(書式を変更するような一部のHTMLタグを使うことができます)
ブラウザに投稿者情報を登録しますか?(Cookieを使用します。次回書き込み時に便利です。)
  •  
  •