Rails byebug 中的多行调试或如何单行救援

Rails multiline debug in byebug or how to rescue in single line

有时我需要调试一些讨厌的异常,它的回溯被隐藏或截断,比如 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

上运行不正常

IRB

begin my_crashing_method.call; rescue Exception => e; puts e.backtrace end

Stack Trace shows successfully

再见

(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

当你在byebug上输入多行ruby代码或单行代码时,你需要使用backlash对分号进行转义。以下应该可以解决问题。

begin\; my_crashing_method.call\; rescue Exception => e\; puts e.backtrace end

https://github.com/deivid-rodriguez/byebug/blob/master/GUIDE.md#command-syntax