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

instance method Thread::Backtrace::Location#source_range

source_range -> Ruby::SourceRangeRuby 4.1 から[permalink][rdoc][edit]

self が表すフレームに対応する Ruby の式の Ruby::SourceRange を返します。

CRuby では、このメソッドは呼び出されるたびにソースファイルを再度読み込んでパースし直すことで範囲を求めます。読み込みで発生したファイルのエラー(存在しないファイルに対する Errno::ENOENT など)はそのまま発生します。

RubyVM.keep_script_lines = true を指定すると、ソースファイルをメモリ上に保持し、ファイルシステムからの再読み込みを避けられます。eval したコードのフレームでは、RubyVM.keep_script_lines = true を指定していないと範囲を取得できません。

[EXCEPTION] RuntimeError:
ソースが変更されているなど、範囲を求めるために必要な情報が得られない場合に発生します。
[EXCEPTION] ArgumentError:
eval したコードのフレームで、RubyVM.keep_script_lines = true を指定していない場合に発生します。
例
loc = caller_locations(0, 1)[0]
range = loc.source_range
p range.path == loc.path         # => true
p range.start_line == loc.lineno # => true

[SEE_ALSO] Thread::Backtrace::Location#syntax_tree, Proc#source_range