Ruby 异常跟踪

Posted

技术标签:

【中文标题】Ruby 异常跟踪【英文标题】:Ruby exception trace 【发布时间】:2015-01-05 23:21:47 【问题描述】:

我有 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

参数错误

但我只得到

第 3 行 my_module.rb

参数错误

我应该怎么做才能看到完整的踪迹?

【问题讨论】:

看看caller,正如另一个问题***.com/questions/6322524/…中所指出的那样 【参考方案1】:

试试$@。其中包含最后一个异常的回溯(最后一个异常对象在$! 中)。

另一种解决方案是使用更好的 ruby​​ shell pry,您可以在其中使用 wtf! 命令查看回溯(感叹号越多,显示的回溯越多)

【讨论】:

Mb,这是一个很好的解决方案。但是为什么当你使用一些著名的库,如 rack 或 activerecord 时,你会看到所有东西的完整痕迹?我希望我的图书馆也这样做!或者,我应该在任何地方再次捕捉并扔掉? 我不是 100% 确定你的意思,但我认为这里的问题是你在 irb 中调用你的方法,这会抑制一些回溯,而 rack 和 activerecord 会吐出到处都是。

以上是关于Ruby 异常跟踪的主要内容,如果未能解决你的问题,请参考以下文章

ruby编程中异常处理的实践解析

在 Ruby 中引发异常与抛出异常有啥区别?

在 Ruby 中捕获异常后重新引发(相同的异常)

雷林鹏分享:Ruby 异常

Ruby异常处理的基础

Ruby 异常