【问题标题】:how to get/traceback method calls stack如何获取/追溯方法调用堆栈
【发布时间】:2014-02-22 02:23:33
【问题描述】:

如果method A被其他方法调用,

有没有办法知道在运行时是哪个函数调用它。

我可以 grep 整个项目来列出所有可能的调用路径,

但如果我能在运行时知道它,它会更有帮助。

如何通过在method A 中嵌入一些东西来获得它

例如,调用流程可能

C() -> B() -> A()

H()-> G()-> B()-> A()

我想知道最近的 3 或 5 个方法调用,

我想在 Rails 项目中跟踪我的控制器和助手中的流程 但我需要示踪剂,它向我展示了。

Routing Error

undefined method `on' for Tracer:Class

Try running rake routes for more information on available routes. 

这是我的代码

      Tracer.on
  def generate_nonexisted_book(price)

   ~~~
  end
  Tracer.off

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:

Ruby 有一个名为Tracerstdlib。我会用下面的一个小例子来演示它:

require 'tracer'

Tracer.on
def a;end
def b; a ; end
def c; b ; end
c
Tracer.off

现在让我运行代码:

(arup~>test)$ ruby -v c.rb
ruby 2.0.0p0 (2013-02-24 revision 39474) [i686-linux]
#0:c.rb:4::-: def a;end
#0:c.rb:5::-: def b; a ; end
#0:c.rb:6::-: def c; b ; end
#0:c.rb:7::-: c
#0:c.rb:6:Object:>: def c; b ; end
#0:c.rb:6:Object:-: def c; b ; end
#0:c.rb:5:Object:>: def b; a ; end
#0:c.rb:5:Object:-: def b; a ; end
#0:c.rb:4:Object:>: def a;end
#0:c.rb:4:Object:<: def a;end
#0:c.rb:5:Object:<: def b; a ; end
#0:c.rb:6:Object:<: def c; b ; end
#0:c.rb:8::-: Tracer.off
(arup~>test)$ 

这里的一些符号符号的描述出现在输出中:

  • +>+ - 调用 Ruby 方法
  • - - 在新行上执行代码
  • + - 从 Ruby 方法返回

【讨论】:

  • 我可以在我的rails项目中使用它吗,谢谢~我出错了。
  • @poc 你用过require 'tracer' 吗?
  • 这个东西好难找,很有用
【解决方案2】:

【讨论】:

    猜你喜欢
    • 2011-12-04
    • 2011-10-10
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2015-09-16
    相关资源
    最近更新 更多