0

我试图找出如何使用 Ruby 的 TracePoint API 来捕获特定类的定义和随后的重新定义(例如“Resolv”)。我可以使用以下方法捕获所有类定义:

TracePoint.trace(:class) do |tp|
  require 'pry'; binding.pry # for example
end

但是,我无法使用其中一个:class:end参数对其进行过滤,因此我只能捕获Resolv该类。该TracePoint对象有一个defined_class属性,但它包含在类定义时是谁(即nilaka (main)),而不是即将处理其定义的类。我也找不到查看正在处理的文件和行的方法。有一个binding变量,但它不包含变量。

我怎样才能做到这一点?

4

1 回答 1

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
于 2017-03-05T12:54:37.640 回答