有时,我需要调试一些隐藏或截断其回溯的讨厌异常,例如没有任何堆栈跟踪的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

最佳答案

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

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

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

关于ruby-on-rails - 在byebug中进行Rails多行调试或如何在单行中进行救援,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42388199/

10-16 19:21