Rails многострочная отладка в byebug или как спасти в одну строку

Иногда мне нужно отладить какое-то неприятное исключение, обратная трассировка которого скрыта или усечена, например ArgumentError без каких-либо следов стека.

Я привык к отладке с помощью byebug. Проблема в том, что интерпретатор byebug представляет собой REPL, поэтому невозможно писать многострочный код. Я пытаюсь выяснить, как сделать inline-спасение и распечатать оттуда обратную трассировку, т.е. я хочу встроенную, совместимую с 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, но не в оболочке byebug

IRB

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

Stack Trace успешно показывает

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 ответ

Когда вы вводите многострочный код 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

Другие вопросы по тегам