首先,我知道使用eval
的风险并已采取预防措施,而不是我在这里问的问题。
我想使用eval
(可能使用输入的多行代码字符串)来检索堆栈跟踪/正确的错误行,我想从评估字符串中获取该行失败。
eval_str = <<EOF
def illegal_stuff
5 / 0 # This will cause a crash
end
5 + 2
illegal_stuff
42
EOF
begin
eval(eval_str)
rescue => ex
ex.backtrace # ???
end
我想以某种方式检索字符串"5 / 0 # This will cause a crash"
回溯似乎没有行号,字符数或类似内容。
我尝试添加eval(eval_str, binding, "__FILE__", "__LINE__")
-但没有发现差异。
是否有任何方法可以检索行号/位置/任何可以帮助我检索导致问题的代码行?
答案 0 :(得分:1)
这是将错误推向原点的一种方法:
def yolo(code)
from = caller_locations.first
eval(code, binding, from.path, from.lineno)
end
yolo <<END
1/0
END
出现类似以下错误的地方
yolo.rb:7:in `/': divided by 0 (ZeroDivisionError)
答案 1 :(得分:0)
回溯似乎没有行号,字符数或类似内容。
不是吗?这适用于我的Ruby:
begin
eval(eval_str)
rescue => ex
eval_str.lines[ex.backtrace.first[/^\(eval\):(\d+):/, 1].to_i - 1]
end