首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当前正在执行代码

当前正在执行代码
EN

Stack Overflow用户
提问于 2015-02-05 12:01:05
回答 2查看 58关注 0票数 1

我正在寻找方法来查看当前正在执行的代码。我的理由是:我有红宝石类,是猴子修补了很多补丁,所以它几乎不可能跟踪哪些方法被改变。是否有任何方法检查哪些代码已加载到内存中并正在执行?

如果你需要的话,询问更多的细节

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-05 12:23:23

一种方法的起源

在ruby1.9和更新版本中,您可以随时打开调试器/控制台,并询问该方法的源位置。

例如,当查找我的admin?类的User方法的定义时,我可以这样做:

代码语言:javascript
复制
user = User.first
=> #<User id: 1, ...>
user.method(:admin?).source_location
=> ["/Users/tessi/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activemodel-4.0.13/lib/active_model/attribute_methods.rb", 382]

它告诉我,admin?方法是在上面文件中的ActiveModel中定义的,在该文件的第382行中定义的。

以类似的方式,您可以迭代类的所有方法并检查方法的来源:

代码语言:javascript
复制
user.methods.map {|method_name| user.method(method_name).source_location}

猴补

这仍然适用于修补类。打开rails控制台时,我可以编辑我的User类并再次查看source_location

代码语言:javascript
复制
class User < ActiveRecord::Base
  def admin?
    puts 'the patched admin? method'
    super
  end
end

User.first.method(:admin?).source_location
=> ["(pry)",2]

现在,方法的位置在语句2的控制台(pry)中,这是可行的,因为我的修补程序创建了一个新的方法-对象,它取代了User类的方法字典中的旧方法。新方法对象返回不同的source_location

票数 1
EN

Stack Overflow用户

发布于 2015-02-05 12:34:15

除了tessi提到的调试器之外,另一种方法是使用ruby-prof对整个应用程序进行基准测试,并分析生成的树。

每个被调用的方法都在其中,因此所需的或不需要的版本也在其中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28343445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档