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