Ruby TracePoint:如何捕获特定类的定义?

时间:2017-03-05 11:34:59

标签: ruby class tracepoint

我试图找出如何使用Ruby的TracePoint API来捕获特定类的定义和后续重新定义(例如' Resolv')。我可以使用:

来捕获所有类定义
http-proxy-middleware

但是,我无法使用TracePoint.trace(:class) do |tp| require 'pry'; binding.pry # for example end :class参数对其进行过滤,因此我只能捕获:end类。 Resolv对象具有TracePoint属性,但其中包含类定义时的自身(defined_class,即nil),而不是类其定义即将被处理。我也找不到方法来查看正在处理哪个文件和行。 一个(main)变量,但它不包含任何变量。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

我所知道的唯一方法是跟踪所有类定义并使用TracePoint#self过滤它们:

TracePoint.new(:end) do |tp|
  if tp.self == Resolv
    # yay, we are in
    # tp.disable # use this to unset a trace point
  end
end.enable