我试图找出如何使用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)
变量,但它不包含任何变量。
我该怎么做?
答案 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