Pryまじ便利。
Pryが真の力を発揮してくれる19個のコマンドとコマンドの自作方法[Rails] - 酒と泪とRubyとRailsと
ちなみにPryにはこういう意味があったらしい。知りませんでした。ロゴを見る限りてこをイメージしているらしい。
pry
【1名】
のぞき見、詮索
詮索好きな人
【1自動】
のぞき込む、詮索する、首を突っ込む、ほじくる
【2名】
てこ、てこ作用(で動かす道具)、てこを応用した道具【2他動】
~をてこで動かす、てこで上げる、苦労して引き出す
デバッグもdebugger
よりもpry-debugger
使っています。pry-debugger
はpry
にステップ実行などの機能を追加するgemです。ブレークしたいところにbinding.pry
と書いておくと、そのときのスコープでPryが起動します。
binding.pryとは
ちょっと脱線。
binding
というのはKernelモジュールのbindingメソッドで、Bindingクラスのオブジェクトを返します。Bindingオブジェクトは
ローカル変数のテーブルとself、モジュールのネストなどの情報を保持するオブジェクトのクラスです。
というものです。
また、binding.pry
のpry
の部分は、pry
という名前のメソッドで、Object
クラスに定義されています。
# pry-0.9.12.6/lib/pry/core_extensions.rb より
class Object
def pry(object=nil, hash={})
if object.nil? || Hash === object
Pry.start(self, object || {})
else
Pry.start(object, hash)
end
end
end
binding.pry
の場合、引数のないpryメソッド呼び出しなので、Pry.start
にself(つまりbinding)を渡してPryを起動するということになるわけですね〜。
pry-stack_explorer
本題に戻ります。
Pryは超便利だけど、単体ではデバッガとしての機能やスタックを追う機能はあります。デバッガの機能はpry-debugger
で使えるようになりました。
スタックトレースを見たい場合はpry-stack_explorer
というgemを導入する必要があります。それにしてもアンダースコアとダッシュを混ぜた名前を付けるなんて、、、!
pry-stack-explorer
をrequireした状態でbinding.pry
によりPryを起動したとき、次のコマンドが使えるようになります。
down
Go down to the callee’s context.frame
Switch to a particular frame.show-stack
Show all framesup
Go up to the caller’s context.
show-stackでスタックトレースがわかるし、up/downでコンテキストの移動ができたりします。Pryという強力な環境でスタックトレースまでできるので、ライブラリの挙動を調べたりデバッグするのによさそう。