Bug #10470
Updated by nobu (Nobuyoshi Nakada) about 10 years ago
TracePointを利用して`attr_accessor`で定義したメソッドの`:c_call`, `:c_return`イベントを取得することができません。 TracePointを利用してattr_accessorで定義したメソッドの:c_call, :c_returnイベントを取得することができません。 ```ruby class Foo attr_accessor :hoge def bar @bar end def initialize(val) @bar = val end end foo = Foo.new("FOO") trace = TracePoint.new(:return, :c_return) do |tp| p [tp.lineno, tp.defined_class, tp.method_id, tp.event, tp.binding, tp.return_value] end trace.enable do foo.bar foo.hoge = "hoge" foo.hoge end ``` 上記のコードを実行した時、attr_accessorで定義した`hoge`メソッドのイベントが発生しません。 上記のコードを実行した時、attr_accessorで定義したhogeメソッドのイベントが発生しません。 調査した所、`EXEC_EVENT_HOOK`の呼び出し自体が無いようです。 調査した所、EXEC_EVENT_HOOKの呼び出し自体が無いようです。 このため、例えばpower_assertを利用した時にアクセサメソッドの戻り値を取得できない等の問題が発生します。 attributeの読み書きを行う処理の中に`EXEC_EVENT_HOOK`を呼び出す簡単なパッチを書きましたので、添付します。 attributeの読み書きを行う処理の中にEXEC_EVENT_HOOKを呼び出す簡単なパッチを書きましたので、添付します。