2017-03-05 20 views
0

RubyのTracePoint APIを使用して、特定のクラス(たとえば 'Resolv')の定義とその後の再定義をトラップする方法を探しています。Ruby TracePoint:特定のクラスの定義をトラップする方法は?

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

をしかし、私はトラップだけResolvクラスをすることができるように:classまたは:endのいずれかのパラメータを使用して、それをフィルタリングすることができません:私は使用しているすべてのクラス定義は、トラップにできています。 TracePointオブジェクトはdefined_class属性を持っていますが、クラス定義の時点で誰が自己であるか(nil、別名(main))、定義を処理しようとしているクラスではありません。また、どのファイルと行が処理されているかを知る方法も見つけられませんでした。 bindingという変数ですが、変数はありません。

どうすればいいですか?

+0

はあなたのラインを与えるtp.path' '' tp.lineno'をせず、ファイル? – SteveTurczyn

+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 
関連する問題