Ruby の TracePoint について
Ruby には TreacePpoint とよばれるクラスがある。 リファレンスによると
Kernel.#set_trace_func と同様の機能をオブジェクト指向的な API で 提供するクラスです。
TracePoint.new でオブジェクトを作る。 #enable で開始、 #disable で終了。その間のコードについてトレースを実行する。
code:ruby
# 引数に渡すシンボルによってトレースするイベントを指定できる。任意の数を引数に渡せる。
trace = TracePoint.new(:return) do |tp|
end
trace.enable
puts "Hello, TracePoint!"
trace.disable
# 以下2行についてはトレースは出力されない
puts "End"
puts "EndEnd"
で、 TracePoint.trace というメソッドがある。 TracePoiint.new ~ trace.enable までやってくれるコンビニエンスメソッド。普段はこれを使うとよさそう。
どういう情報を返すのかはまだ調べきれてない、 defined_class は便利そう
変数が所持するオブジェクトのクラスとか知りたい時が多々あるので、これでわかるとうれしい。もっと他のやり方もあるような気はしているが…