【问题标题】:Why is my backtrace being filtered?为什么我的回溯被过滤了?
【发布时间】:2014-08-14 23:09:55
【问题描述】:

我在第三方库中遇到异常。由于某种原因,回溯跳过了很多行。我已经把它放在一个初始化器中:

Rails.backtrace_cleaner.remove_silencers!
Rails.backtrace_cleaner.remove_filters!

这些行没有效果。

还有什么会影响回溯的内容?是否有我可以检查的全局对象,或者我可以在可疑宝石中搜索的方法调用?

我正在使用 JRuby、Rails 4.1,并且有问题的库是 dullard

进一步说明

下面是回溯正常工作方式的示例。这段代码...

def a
  raise "i am in a"
end

def b
  puts "i am in b"
  a
end

def c
  puts "i am in c"
  b
end

c

这个输出的结果...

➔ ruby exceptiontest.rb
i am in c
i am in b
exceptiontest.rb:2:in `a': i am in a (RuntimeError)
    from exceptiontest.rb:7:in `b'
    from exceptiontest.rb:12:in `c'
    from exceptiontest.rb:15:in `<main>'

由于我的问题,我得到了这个输出......

➔ ruby exceptiontest.rb
i am in c
i am in b
exceptiontest.rb:2:in `a': i am in a (RuntimeError)
    from exceptiontest.rb:15:in `<main>'

【问题讨论】:

  • 我假设您在添加这些行后重新启动了服务器?
  • 是的。 [这条消息我需要更多字符...]

标签: ruby-on-rails ruby jruby


【解决方案1】:
  1. 这是否在生产中发生?
  2. 您能否提供有关回溯的更多背景信息?跳过行是指某些回溯实际上是可见的,而有些则不是?
  3. 如果是开发,你知道哪个 gem 引发了异常吗?如果是这样,打开它(bundle open),并使用pry,将binding.pry 语句放在回溯中感兴趣的行之前。您将能够看到异常发生时发生的情况,如有必要,您将能够cd 了解更多情况。

【讨论】:

  • 1.它发生在开发 2. 调用 Foo.bar 时发生异常,但堆栈跟踪没有显示调用 Foo.bar,它只显示调用以前的代码 3。我这样做是为了从异常之前显示的代码是为了找到真正的源代码——这就是你的意思吗?
  • 参见上面的“进一步解释”
猜你喜欢
  • 2015-02-15
  • 1970-01-01
  • 2020-06-16
  • 2011-10-19
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
相关资源
最近更新 更多