Feature #13483
closedTracePoint#enable with block for thread-local trace
Description
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.
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
.
Thanks,
Koichi