三浦と申します
set_trace_funcを引っ掛けるのはタイムアウトしてからでいいんじゃないかな?
と思い作ってみました。
#!/usr/bin/ruby
require "pp"
def recursive(n=100)
if n>0
rec2(n-1)
end
end
def rec2(n)
recursive(n)
end
Thread.new do
sleep(1)
tf = lambda do |event, file, line, id, binding, klass|
Thread.current[:bs] = binding
end
while Thread.list.any?{|n| n.status == "run" and n[:bs].nil? } do
set_trace_func(tf)
Thread.pass
set_trace_func(nil)
end
Thread.list.each do |th|
p th
if th[:bs] then
puts eval("caller", th[:bs])
end
print "\n"
end
Thread.main.raise("END")
end
loop do
recursive
end