9

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

1 回答 1

8

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

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

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

于 2018-08-18T13:51:26.983 回答