Трассировка исключения Ruby

У меня есть функция Ruby, например:

module MyModule
  def function
    raise ArgumentException if true
  end
end

Затем я использую эту функцию в некоторых других функциях вложенности, например

def upperfunction
   MyModule::function
end

Итак, если я вызову верхнюю функцию в irb, я хочу увидеть полную трассировку, например

строка 2 верхняя функция.rb

строка 3 my_module.rb

АргументОшибка

Но я получаю только

строка 3 my_module.rb

АргументОшибка

Что я должен сделать, чтобы увидеть полную трассировку?


person Virviil    schedule 05.01.2015    source источник
comment
Взгляните на caller, как указано в этом другом вопросе stackoverflow.com/questions/6322524/   -  person Hector Correa    schedule 06.01.2015


Ответы (1)


Попробуйте $@. Он содержит обратную трассировку последнего исключения (последний объект исключения находится в $!).

Альтернативным решением может быть использование лучшей оболочки ruby, pry, в которой вы можете увидеть следы с помощью команды wtf! ( больше восклицательных знаков, тем больше будет показана обратная трасса)

person jjm    schedule 05.01.2015
comment
Мб, это хорошее решение. Но почему, когда вы используете некоторые известные библиотеки, такие как стойку или активную запись, вы можете видеть полный след всего? Я хочу, чтобы моя библиотека делала то же самое! Или мне снова ловить и бросать все и везде? - person Virviil; 06.01.2015
comment
Я не уверен на 100%, что вы имеете в виду, но я думаю, что здесь проблема в том, что вы вызываете свой метод в irb, который подавляет часть обратной трассировки, тогда как стойку и активную запись будут выдавать ее повсюду. - person jjm; 07.01.2015