組込ライブラリ(TracePoint)
Rubyインタプリタのイベントをトレースする Proc オブジェクトとして指定された proc を登録する。
成果物
情報源
TracePoint
例:例外に関する情報を収集する
trace = TracePoint.new(:raise) do |tp| p [tp.lineno, tp.event, tp.raised_exception] end # => #<TracePoint:0x007f786a452448> trace.enable # => false 0 / 0 # => [5, :raise, #<ZeroDivisionError: divided by 0>]
TracePoint.new または、TracePoint.trace で指定したブロックは、メソッドの引数(上記の例では :raise)に対応するイベントが発生した時に呼び出されます。
発生するイベントの詳細については、TracePoint.new を参照してください。
参考
- Ruby VM アドベントカレンダー #12 TracePoint の紹介 (1): https://www.atdot.net/~ko1/diary/201212.html#d12
- Ruby VM アドベントカレンダー #13 TracePoint の紹介 (2): https://www.atdot.net/~ko1/diary/201212.html#d13
- Ruby VM アドベントカレンダー #14 TracePoint の紹介 (3): https://www.atdot.net/~ko1/diary/201212.html#d14
メンバ抜粋
特異メソッド
new stat trace
インスタンスメソッド
binding callee_id defined_class disable enable enabled? event inspect lineno method_id path raised_exception return_value self
new
#!/usr/bin/env ruby trace = TracePoint.new(:call) do |tp| p [tp.lineno, tp.defined_class, tp.method_id, tp.event] end p trace # => #<TracePoint:0x007f17372cdb20> p trace.enable # => false puts "Hello, TracePoint!" # ... # [69, IRB::Notifier::AbstractNotifier, :printf, :call] # ...
最後のコメントにかかれているような表示はなかったんだけど……。どゆこと?
所感
よくわからんかった。
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
- Ruby 3.0.2
$ uname -a Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux