【Ruby3.x】Fiber::backtrace_locations()メソッドの使い方
backtrace_locationsメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
backtrace_locationsメソッドは、Rubyの軽量な並行処理の仕組みであるFiberオブジェクトの現在の実行スタックの情報を取得するメソッドです。Fiberは、スレッドよりも軽量に協調的なマルチタスクを実現するためのものであり、処理を途中で一時停止し、後で再開できる特性を持ちます。
このメソッドを使用すると、指定されたFiberが現在どこで実行を一時停止しているか、または最後に実行されていたかを詳細に調べることができます。具体的には、プログラムがどのようなメソッドの呼び出し順序を経て現在の位置に至ったか、その履歴(バックトレース)をリストとして取得します。この履歴は、通常、エラーが発生した際に表示される情報と似ており、呼び出し元のファイル名、行番号、そしてメソッド名などの情報を含んでいます。
戻り値は、Thread::Backtrace::Locationオブジェクトの配列です。それぞれのLocationオブジェクトは、呼び出しスタック上の特定のフレームに関する詳細な情報(例えば、ファイル名、行番号、そのフレームで実行されていたメソッドやブロックの名前など)を提供します。この情報は、デバッグ作業において、プログラムの実行フローを追跡したり、特定のFiberがなぜその状態にあるのかを分析したりする際に非常に有用です。特に、複数のFiberが複雑に連携するアプリケーションで問題が発生した場合に、各Fiberの実行状況を把握するために役立ちます。
構文(syntax)
1f = Fiber.new { Fiber.yield } 2f.resume 3locations = f.backtrace_locations
引数(parameters)
start = 0, length = nil
- start = 0: バックトレースの取得を開始するインデックスを指定する整数。デフォルトは0で、最新のコールフレームから取得します。
- length = nil: 取得するバックトレースの最大行数を指定する整数。nilの場合、指定されたstart以降の全てのコールフレームを取得します。
戻り値(return)
現在のFiberにおける実行時のバックトレースを表すThread::Backtrace::Locationオブジェクトの配列を返します。