ruby-on-rails - 如何获取/追溯方法调用堆栈

标签 ruby-on-rails ruby

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

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

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

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

如何通过在 method A

中嵌入一些东西来获得它

例如,调用流程可能

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

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

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

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

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 有一个名为 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 方法返回

关于ruby-on-rails - 如何获取/追溯方法调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21948812/

相关文章:

arrays - 按相应范围对数组进行排序

ruby-on-rails - Ruby on Rails SaaS 免费计费管理

ruby-on-rails - 如何升级到最新版本的 ruby​​ on rails 3.2.8?

javascript - 从 javascript onclick 发出 ajax 请求

ruby - 为什么不能使用要处理的符号调用 protected 方法?

ruby - 如何从命令将 Selenium Webdriver(Ruby 绑定(bind))测试结果打印到记事本文件?

ruby-on-rails - 在 Ruby 1.9 中使用 instance_eval 进行常量查找

ruby-on-rails - 我如何解析一个 Excel 文件,它会给我提供与视觉上完全一样的数据?

ruby - 我应该将非 Ruby 文件放在我的 gem 中的什么位置?

ruby-on-rails - 创建新评级时更新帖子属性