有时我需要调试一些隐藏或截断回溯的令人讨厌的异常,比如ArgumentError
没有任何堆栈跟踪。
我习惯用 byebug 调试。问题是 byebug 解释器是一个 REPL,所以不可能编写多行代码。我试图弄清楚如何进行内联救援并从那里打印回溯,即我想要一个内联、REPL 兼容的版本
begin
....
rescue => e
puts e.backtrace.join("\n")
end
我努力了
begin; my_crashing_method.call; rescue Exception => e; puts e.backtrace; end
但是该行引发了 SyntaxError
*** SyntaxError Exception: (byebug):1: syntax error, unexpected keyword_rescue
rescue Exception => e
^
我不确定我错过了什么?
编辑
上面的行在常规 IRB/Rails shell 上工作正常,但在 byebug shell 上不行
内陆税收局
begin my_crashing_method.call; rescue Exception => e; puts e.backtrace end
堆栈跟踪显示成功
再见虫
(byebug) begin; my_crashing_method.call; rescue Exception => e; puts e.backtrace
*** SyntaxError Exception: (byebug):1: syntax error, unexpected end-of-input
begin
^
nil
*** NameError Exception: undefined local variable or method `my_crashing_method' for #<StaticPagesController:0x007fae79f61088>
nil
*** SyntaxError Exception: (byebug):1: syntax error, unexpected keyword_rescue
rescue Exception => e
^
nil
*** NameError Exception: undefined local variable or method `e' for #<StaticPagesController:0x007fae79f61088>
nil