set_trace_func

Es posible monitorizar la ejecución de un programa usando set_trace_func. set_trace_func tiene la sintáxis:
set_trace_func( proc ) → proc 
set_trace_func( nil ) → nil
Establece proc como un manejador para crear una traza de la ejecución. Si es nil desactivamos la traza.

El proc toma 6 parámetros:

proc es invocado cada vez que ocurre un evento. Los eventos son: La traza se desactiva en el contexto de proc.

~/rubytesting/programmingRuby/src_of_programming_ruby_by_dave_thomas$ cat -n ex0682.rb 
     1  class Test
     2    def initialize
     3      puts "In initialize"
     4    end
     5    def test
     6      a = 1
     7      b = 2
     8    end
     9  end
    10  
    11  set_trace_func proc {|event, file, line, id, binding, classname|
    12    printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
    13  }
    14  t = Test.new
    15  t.test
~/rubytesting/programmingRuby/src_of_programming_ruby_by_dave_thomas$ ruby ex0682.rb 
    line ex0682.rb:14               false
  c-call ex0682.rb:14        new    Class
    call ex0682.rb:2  initialize     Test
    line ex0682.rb:3  initialize     Test
  c-call ex0682.rb:3        puts   Kernel
  c-call ex0682.rb:3       write       IO
In initialize
c-return ex0682.rb:3       write       IO
  c-call ex0682.rb:3       write       IO

c-return ex0682.rb:3       write       IO
c-return ex0682.rb:3        puts   Kernel
  return ex0682.rb:3  initialize     Test
c-return ex0682.rb:14        new    Class
    line ex0682.rb:15               false
    call ex0682.rb:5        test     Test
    line ex0682.rb:6        test     Test
    line ex0682.rb:7        test     Test
  return ex0682.rb:7        test     Test
Otro método que puede ser usado para obtener mas información sobre la traza es trace_var
~/rubytesting/programmingRuby/src_of_programming_ruby_by_dave_thomas$ cat -n trace_var.rb 
     1  trace_var :$_, proc {|v| puts "$_ is now '#{v}'" }
     2  $_ = "hello"
     3  $_ = ' there'

~/rubytesting/programmingRuby/src_of_programming_ruby_by_dave_thomas$ ruby trace_var.rb 
$_ is now 'hello'
$_ is now ' there'

Casiano Rodriguez León 2015-01-07