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