Issue #10470 has been updated by Nobuyoshi N…
Description updated
Category set to core
Status changed from Open to Assigned
Assignee set to Koichi Sasada
Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN to 2.0.0: REQUIRED,
2.1: REQUIRED
Bug #10470: TracePoint cannot trace attr_accessor/reader/writer method
- Author: Tomohiro Hashidate
- Status: Assigned
- Priority: Normal
- Assignee: Koichi Sasada
- Category: core
- Target version: current: 2.2.0
- ruby -v: ruby 2.2.0dev (2014-11-01 trunk 48219) [x86_64-darwin13]
- Backport: 2.0.0: REQUIRED, 2.1: REQUIRED
TracePointを利用してattr_accessor
で定義したメソッドの:c_call
,
:c_return
イベントを取得することができません。
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
メソッドのイベントが発生しません。
調査した所、EXEC_EVENT_HOOK
の呼び出し自体が無いようです。
このため、例えばpower_assertを利用した時にアクセサメソッドの戻り値を取得できない等の問題が発生します。
attributeの読み書きを行う処理の中にEXEC_EVENT_HOOK
を呼び出す簡単なパッチを書きましたので、添付します。
—Files--------------------------------
fix_attr_accessor_event.diff (1.98 KB)