instance method
Fiber#backtrace
(?::Integer start, ?::Integer count) -> ::Array[::String]?
(::Range[::Integer]) -> ::Array[::String]?
fiber.backtrace → array
fiber.backtrace(start) → array
fiber.backtrace(start, count) → array
fiber.backtrace(start..end) → array
cont.c
View on GitHub ↗
static VALUE
rb_fiber_backtrace(int argc, VALUE *argv, VALUE fiber)
{
return rb_vm_backtrace(argc, argv, &fiber_ptr(fiber)->cont.saved_ec);
}
Returns the current execution stack of the fiber. start, count and end allow to select only parts of the backtrace.
Example
def level3 Fiber.yield end def level2 level3 end def level1 level2 end f = Fiber.new { level1 } # It is empty before the fiber started f.backtrace #=> [] f.resume f.backtrace #=> ["test.rb:2:in `yield'", "test.rb:2:in `level3'", "test.rb:6:in `level2'", "test.rb:10:in `level1'", "test.rb:13:in `block in <main>'"] p f.backtrace(1) # start from the item 1 #=> ["test.rb:2:in `level3'", "test.rb:6:in `level2'", "test.rb:10:in `level1'", "test.rb:13:in `block in <main>'"] p f.backtrace(2, 2) # start from item 2, take 2 #=> ["test.rb:6:in `level2'", "test.rb:10:in `level1'"] p f.backtrace(1..3) # take items from 1 to 3 #=> ["test.rb:2:in `level3'", "test.rb:6:in `level2'", "test.rb:10:in `level1'"] f.resume # It is nil after the fiber is finished f.backtrace #=> nil
Ruby version changes
-
3.0
-
Fiber#backtraceandFiber#backtrace_locationsprovide per-fiber backtrace. [Feature #16815]
-