11

我将 Ruby on Rails 与 pry gem 一起使用。当 rake 任务期间发生错误时,我会得到一个非常好的堆栈跟踪。

但是,当我在 Rails 控制台中执行某些触发异常的操作时,我只能看到错误消息和触发它的一行代码(大部分时间都在 Rails 核心中的某个位置)。

有没有办法在控制台中启用这些堆栈转储?

4

2 回答 2

36

我自己找到了解决方案。

显然,我需要wtf?pry 附带的命令。

[7] project »  p.known_attributes
NoMethodError: undefined method `foo' for #<Bar:0x007f871fd12a38>
from /[...]/gems/activemodel-4.0.0/lib/active_model/attribute_methods.rb:436:in `method_missing'

[8] project »  wtf?
Exception: NoMethodError: undefined method `foo' for #<Bar:0x007f871fd12a38>
--
[... stack dump ...]  

[9] project »  
于 2013-07-15T14:02:21.520 回答
2

当控制台出现错误时,您应该会看到类似这样的内容

$ rails c
Loading development environment (Rails 4.0.0)
irb(main):001:0> no_method
NameError: undefined local variable or method `no_method' for main:Object
    from (irb):1
    from /Users/michal/Projects/tennisliga/.gems/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start'
    from /Users/michal/Projects/tennisliga/.gems/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start'
    from /Users/michal/Projects/tennisliga/.gems/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

它有什么问题?你没有看到堆栈跟踪?

编辑:如果您正在使用 pry 并希望查看更多堆栈跟踪,请参阅pry wiki 简短示例(显示所有行)

Pry.config.exception_handler = proc do |output, exception, _pry_|
  output.puts "#{exception}"
  output.puts "#{exception.backtrace}"
end
于 2013-07-15T13:12:42.300 回答