Ruby异常跟踪

3
我有一个Ruby函数,如下所示:
module MyModule
  def function
    raise ArgumentException if true
  end
end

然后,我会在其他嵌套函数中使用这个函数,就像这样:
def upperfunction
   MyModule::function
end

那么,如果我在irb中调用upperfunction函数,我希望看到完整的跟踪信息,例如:

第2行 upperfunction.rb

第3行 my_module.rb

ArgumentError

但是我只能看到:

第3行 my_module.rb

ArgumentError

我应该怎么做才能看到完整的跟踪信息呢?


请查看此其他问题中指示的 caller https://dev59.com/km015IYBdhLWcg3w6QA0 - Hector Correa
1个回答

4

尝试使用$@。它包含了最后一个异常的回溯信息(最后一个异常对象在$!中)。

另一种解决方案是使用更好的ruby shell,pry,通过wtf!命令可以查看回溯信息(感叹号越多,显示的回溯信息就越多)。


1
这是一个不错的解决方案。但是,为什么当您使用像rack或activerecord这样的著名库时,您可以看到所有内容的完整跟踪?我希望我的库也能做到这一点! 或者,我应该捕获并在任何地方重新抛出所有内容吗? - Virviil
我不完全确定你的意思,但我认为问题在于你在irb中调用了你的方法,这会抑制一些回溯信息,而rack和activerecord会在各个地方输出它。 - jjm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接