evalでスタックトレースのファイル名と行番号を差し替える
Kernel.#eval
、Module#module_eval
、BasicObject#instance_eval
では引数にファイル名と行番号を与えることで、スタックトレースのファイル名と行番号を差し替えることができる。以下は文字列がtest.rb
の100行目に書かれているかのようにスタックトレースを表示させる例である。
eval(<<EOS, binding, 'test.rb', 100) raise "error" EOS
filename:100:in `<main>': error (RuntimeError) from /tmp/vCWIAge/65:1:in `eval' from /tmp/vCWIAge/65:1:in `<main>'