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