こんばんは、sheepman です。

Fiber#yield が投げる例外が、バックトレースに情報を含んでないので
デバッグの役に立ちません。どこでエラーが起きたか分かるようにできない
でしょうか。例えば以下みたいな感じで。

$ cat r.rb
class Fiber
  def self.new2(&b)
    self.new {
      begin
        b.yield
      rescue => e
        e
      end
    }
  end

  def yield2
    ret = self.yield
    if ret.is_a? Exception
      raise ret
    else
      ret
    end
  end
end

def raize
  raise StandardError
end

f = Fiber.new2 do
  raize
end

f.yield2

$ ruby-1.9 -v r.rb
ruby 1.9.0 (2007-06-10 patchlevel 0) [i686-linux]
r.rb:23:in `raise': StandardError (StandardError)
        from r.rb:23:in `raize'
        from r.rb:27:in `block in <main>'
        from r.rb:5:in `yield'
        from r.rb:5:in `block in new2'

-- 
sheepman / TAMURA Takashi
sheepman / sheepman.sakura.ne.jp