やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

組込ライブラリ(TracePoint)

 Rubyインタプリタのイベントをトレースする Proc オブジェクトとして指定された proc を登録する。

成果物

情報源

TracePoint

Kernel.#set_trace_func と同様の機能をオブジェクト指向的な API で提供するクラスです。

例:例外に関する情報を収集する

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 を参照してください。

参考

メンバ抜粋

特異メソッド

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]
# ...

 最後のコメントにかかれているような表示はなかったんだけど……。どゆこと?

所感

 よくわからんかった。

対象環境

$ uname -a
Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux