Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more

In Files

  • tracer.rb

Class/Module Index [+]

Quicksearch

Tracer

tracer main class

Attributes

display_c_call[RW]

display builtin method call?

display_c_call?[RW]

display builtin method call?

display_process_id[RW]

display process id?

display_process_id?[RW]

display process id?

display_thread_id[RW]

display thread id?

display_thread_id?[RW]

display thread id?

stdout[RW]
stdout_mutex[R]
verbose[RW]
verbose?[RW]

Public Class Methods

add_filter(p = proc) click to toggle source
 
               # File tracer.rb, line 179
def Tracer.add_filter(p = proc)
  Single.add_filter(p)
end
            
new() click to toggle source
 
               # File tracer.rb, line 55
def initialize
  @threads = Hash.new
  if defined? Thread.main
    @threads[Thread.main.object_id] = 0
  else
    @threads[Thread.current.object_id] = 0
  end

  @get_line_procs = {}

  @filters = []
end
            
off() click to toggle source
 
               # File tracer.rb, line 171
def Tracer.off
  Single.off
end
            
on() click to toggle source
 
               # File tracer.rb, line 163
def Tracer.on
  if block_given?
    Single.on{yield}
  else
    Single.on
  end
end
            
set_get_line_procs(file_name, p = proc) click to toggle source
 
               # File tracer.rb, line 175
def Tracer.set_get_line_procs(file_name, p = proc)
  Single.set_get_line_procs(file_name, p)
end
            

Public Instance Methods

add_filter(p = proc) click to toggle source
 
               # File tracer.rb, line 91
def add_filter(p = proc)
  @filters.push p
end
            
get_line(file, line) click to toggle source
 
               # File tracer.rb, line 99
def get_line(file, line)
  if p = @get_line_procs[file]
    return p.call(line)
  end

  unless list = SCRIPT_LINES__[file]
    begin
      f = File::open(file)
      begin
        SCRIPT_LINES__[file] = list = f.readlines
      ensure
        f.close
      end
    rescue
      SCRIPT_LINES__[file] = list = []
    end
  end

  if l = list[line - 1]
    l
  else
    "-\n"
  end
end
            
get_thread_no() click to toggle source
 
               # File tracer.rb, line 124
def get_thread_no
  if no = @threads[Thread.current.object_id]
    no
  else
    @threads[Thread.current.object_id] = @threads.size
  end
end
            
off() click to toggle source
 
               # File tracer.rb, line 86
def off
  set_trace_func nil
  stdout.print "Trace off\n" if Tracer.verbose?
end
            
on() click to toggle source
 
               # File tracer.rb, line 72
def on
  if block_given?
    on
    begin
      yield
    ensure
      off
    end
  else
    set_trace_func method(:trace_func).to_proc
    stdout.print "Trace on\n" if Tracer.verbose?
  end
end
            
set_get_line_procs(file, p = proc) click to toggle source
 
               # File tracer.rb, line 95
def set_get_line_procs(file, p = proc)
  @get_line_procs[file] = p
end
            
stdout() click to toggle source
 
               # File tracer.rb, line 68
def stdout
  Tracer.stdout
end
            
trace_func(event, file, line, id, binding, klass, *) click to toggle source
 
               # File tracer.rb, line 132
def trace_func(event, file, line, id, binding, klass, *)
  return if file == __FILE__

  for p in @filters
    return unless p.call event, file, line, id, binding, klass
  end

  return unless Tracer::display_c_call? or 
    event != "c-call" && event != "c-return"

  Tracer::stdout_mutex.synchronize do
    if EVENT_SYMBOL[event]
      stdout.printf("<%d>", $$) if Tracer::display_process_id?
      stdout.printf("#%d:", get_thread_no) if Tracer::display_thread_id?
      if line == 0
        source = "?\n"
      else
        source = get_line(file, line)
      end
      printf("%s:%d:%s:%s: %s",
             file,
             line,
             klass || '', 
             EVENT_SYMBOL[event],
             source)
    end
  end

end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus