Edited at

Ruby でフックできるイベント一覧

Ruby でフックできるイベントを調べてみました。


イベント一覧


メソッド一覧

メソッド名
呼び出されるタイミング

method_missing
存在しないメソッドが呼び出された時

const_missing
存在しない定数を参照した時

respond_to_missing?

respond_to? の結果が false の時

method_added
メソッドが追加された時

method_removed
メソッドが remove_method によって削除された時

method_undefined
メソッドが undef_methodundef によって削除された時

singleton_method_added
特異メソッドが追加された時

singleton_method_removed
特異メソッドが remove_method によって削除された時

singleton_method_undefined
特異メソッドが undef_methodundef によって削除された時

prepend_features

Module#prepend の実体

prepended

Module#prepend した後

append_features

Module#include の実体

included

Module#include した後

extend_object

Object#extend の実体

extended

Object#extend した後

inherited
クラスのサブクラスが定義された時

at_exit
プログラム終了時


TracePoint イベント一覧

TracePoint でフックできるイベントは以下のようになっています。

イベント
説明

:line
式の評価

:class
クラス定義、特異クラス定義、モジュール定義への突入

:end
クラス定義、特異クラス定義、モジュール定義の終了

:call
Ruby で記述されたメソッドの呼び出し

:return
Ruby で記述されたメソッド呼び出しからのリターン

:c_call
Cで記述されたメソッドの呼び出し

:c_return
Cで記述されたメソッド呼び出しからのリターン

:raise
例外の発生

:b_call
ブロックの開始

:b_return
ブロックの終了

:thread_begin
スレッドの開始

:thread_end
スレッドの終了

:fiber_switch
ファイバーの切り替え

:script_compiled
スクリプトが ISeq に変換された後

TracePoint のサンプルコードについては Ruby の TracePoint について調べてみた#トレース出来るイベントの種類 を参照して下さい。

set_trace_func でも同様なイベントが取得可能ですが、 TracePoint に比べると取得出来るイベントの種類も少ない & 使い勝手が悪いので今はあまり使われていないかもしれません。


変数のトレース

メソッド名
説明
備考

trace_var
グローバル変数のトレース
Rubyのグローバル変数をトレースする