在byebug中进行Rails多线调试或如何在单线中进行救援

时间:2017-02-22 09:56:13

标签: ruby-on-rails ruby byebug

有时我需要调试一些隐藏或截断隐藏的异常异常,就像没有任何堆栈跟踪的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
  

堆栈跟踪显示成功

Byebug

(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

1 个答案:

答案 0 :(得分:2)

当您输入多行红宝石代码或在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