set_trace_func

set_trace_func

ri

 -------------------------------------------------- Kernel#set_trace_func
      set_trace_func(proc)    => proc
      set_trace_func(nil)     => nil
 ------------------------------------------------------------------------
      Establishes _proc_ as the handler for tracing, or disables tracing
      if the parameter is  nil . _proc_ takes up to six parameters: an
      event name, a filename, a line number, an object id, a binding, and
      the name of a class. _proc_ is invoked whenever an event occurs.
      Events are:  c-call  (call a C-language routine),  c-return 
      (return from a C-language routine),  call  (call a Ruby method),
       class  (start a class or module definition),  end  (finish a class
      or module definition),  line  (execute code on a new line),  raise 
      (raise an exception), and  return  (return from a Ruby method).
      Tracing is disabled within the context of _proc_.
 
          class Test
          def test
            a = 1
            b = 2
          end
          end
      
          set_trace_func proc { |event, file, line, id, binding, classname|
             printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
          }
          t = Test.new
          t.test
      
            line prog.rb:11               false
          c-call prog.rb:11        new    Class
          c-call prog.rb:11 initialize   Object
        c-return prog.rb:11 initialize   Object
        c-return prog.rb:11        new    Class
            line prog.rb:12               false
            call prog.rb:2        test     Test
            line prog.rb:3        test     Test
            line prog.rb:4        test     Test
          return prog.rb:4        test     Test
 

refe

 Kernel#set_trace_func
 --- set_trace_func(trace_proc)
 
     Ruby インタプリタプログラムを実行する過程で、メソッドの呼び出しや
     式の評価などのイベントが発生する度に手続きオブジェクト trace_proc
     を実行します。標準添付のデバッガ [debug.rb]、トレーサ [tracer.rb]、
     プロファイラ [profile.rb]はこの組み込み関数を利用して実現されています。
 
     例:
         set_trace_func lambda {|event, file, line, id, binding, klass|
             # ....
         }
 
     ブロック引数の意味は以下の通りです。
 
     : event
         実行のタイプを表す、以下のいずれかの文字列。
         * "line" ... 式の評価。
         * "call" ... メソッドの呼び出し。
         * "return" ... メソッド呼び出しからのリターン。
         * "c-call" ... Cで記述されたメソッドの呼び出し。
         * "c-return" ... Cで記述されたメソッド呼び出しからのリターン。
         * "class" ... クラス定義、特異クラス定義、モジュール定義への突入。
         * "end" ... クラス定義、特異クラス定義、モジュール定義の終了。
         * "raise" ... 例外の発生。
 
     : file
         実行中のプログラムソースファイル名 (文字列)。
 
     : line
         実行中のプログラムソースファイル上の行番号 (整数)。
 
     : id
         event に応じ、以下のものが渡されます。
         第六ブロック引数klass と対応しています。
 
         : line
             最後に呼び出されたメソッドを表す Symbol オブジェクトトップレベルでは nil。
         : call/return/c-call/c-return
             呼び出された/リターンするメソッドを表す Symbol オブジェクト。
         : class/end
             nil。
         : raise
             最後に呼び出されたメソッドを表す Symbol オブジェクトトップレベルでは nil。
 
     : binding
         実行中のプログラムのコンテキストを表す Binding オブジェクト。
 
     : klass
         event に応じ、以下のものが渡されます。
         第四ブロック引数id と対応しています。
 
         : line
             最後に呼び出されたメソッドが属するクラスを表す
             Class オブジェクトトップレベルでは
             false。
         : call/return/c-call/c-return
             呼び出された/リターンするメソッドが属するクラス
             を表す Class オブジェクト。
         : class/end
             false。
         : raise
             最後に呼び出されたメソッドが属するクラスを表す
             Classオブジェクトトップレベルでは
             false