Ruby 4.1 リファレンスマニュアル

instance method Fiber#backtrace

backtrace -> [String]Ruby 3.0 から[permalink][rdoc][edit]
backtrace(start) -> [String]
backtrace(start, length) -> [String]
backtrace(range) -> [String]

self が表すファイバーの現在の実行スタックを返します。

引数を指定すると、返すスタックの範囲を指定できます。引数の意味は Kernel?.caller と同じです。

ファイバーの実行が開始される前と、終了した後は空の配列を返します。

[PARAM] start:
開始フレームの位置を数値で指定します。
[PARAM] length:
取得するフレームの個数を指定します。
[PARAM] range:
取得したいフレームの範囲を Range で指定します。
def level3 = Fiber.yield
def level2 = level3
def level1 = level2

f = Fiber.new { level1 }

# 開始前は空
p f.backtrace # => []

f.resume

p f.backtrace
# => ["t.rb:1:in 'Fiber.yield'", "t.rb:1:in 'Object#level3'", "t.rb:2:in 'Object#level2'",
#     "t.rb:3:in 'Object#level1'", "t.rb:5:in 'block in <main>'"]
p f.backtrace(1, 2)
# => ["t.rb:1:in 'Object#level3'", "t.rb:2:in 'Object#level2'"]

f.resume

# 終了後も空
p f.backtrace # => []

[SEE_ALSO] Fiber#backtrace_locations, Kernel?.caller