如何使用ruby调试器获取堆栈跟踪?

时间:2013-04-10 17:32:14

标签: ruby-on-rails ruby debugging backtrace

我正在尝试在Rails应用程序中使用ruby调试器。

为了显示堆栈跟踪,我需要在(rdb:1)提示符下键入什么命令?我已经尝试了backtrace,但它只列出了最顶层的框架。

3 个答案:

答案 0 :(得分:24)

http://apidock.com/ruby/Kernel/caller

caller(0)  # Returns the stack trace, omitting 0 initial entry.

答案 1 :(得分:5)

这是debugger中的错误。如果您使用的是Ruby> = 2.0,我建议您使用byebug。从版本1.5.0开始,问题就解决了。 Thisdebugger回购邮件中的错误报告,这是在那里建议的解决方法:

pp caller.drop_while {|e| e[/ruby-debug|\(eval\)|debugger|\<internal:prelude\>/] }

答案 2 :(得分:1)

Pry gem确实有一个插件pry-stack_explorer可以显示堆栈

示例:在帧之间移动

[8] pry(J)> show-stack

Showing all accessible frames in stack:
--
=> #0 [method]  c <Object#c()>
   #1 [block]   block in b <Object#b()>
   #2 [method]  b <Object#b()>
   #3 [method]  alphabet <Object#alphabet(y)>
   #4 [class]   <class:J>
   #5 [block]   block in <main>
   #6 [eval]    <main>
   #7 [top]     <main>
[9] pry(J)> frame 3

Frame number: 3/7
Frame type: method

From: /Users/john/ruby/projects/pry-stack_explorer/examples/example.rb @ line 10 in Object#alphabet:

     5:
     6: require 'pry-stack_explorer'
     7:
     8: def alphabet(y)
     9:   x = 20
 => 10:   b
    11: end
    12:
    13: def b
    14:   x = 30
    15:   proc {
[10] pry(J)> x
=> 20

此外,它还有很多ruby调试器缺少的其他功能。所以我建议你试试pry&amp;它的插件