Feature #13483
Updated by nobu (Nobuyoshi Nakada) over 7 years ago
# Summary `TracePoint#enable` with block should enable thread-local trace. # Current behavior `TracePoint#enable` enables TracePoint for all of threads, even if it called with `do...end` blcok. ```ruby ``` t1 = Thread.new{ loop{ x = 1 } } th = nil trace = TracePoint.new(:line){|tp| if th != Thread.current p th = Thread.current end } trace.enable do loop{ a = 1 b = 2 } end ``` This program shows both main thread and thread `t1` hooked by line events. # Problem However, usually `trace.enable do ... end` imply the programmer want to enable hooks only for this block, not for other threads. For example, Ruby's test for TracePoint skips hooks on other threads. https://github.com/ruby/ruby/blob/trunk/test/ruby/test_settracefunc.rb#L620 # Proposal `TracePoint#enable` with block should enable thread-local trace. I believe proposed behavior is easy to use. # Consideration (1) It breaks backward compatibility. Is it acceptable? (2) What happen on created threads? Should inherit thread-local hooks or ignore them? I want to ask users of `TracePoint`. TracePoint. Thanks, Koichi