In Files

  • tracer.rb

Class/Module Index [+]

Quicksearch

Tracer

tracer main class

Constants

EVENT_SYMBOL
Single

Attributes

stdout[RW]
verbose[RW]
verbose?[RW]

Public Class Methods

add_filter(p = proc) click to toggle source
 
               # File tracer.rb, line 149
def Tracer.add_filter(p = proc)
  Single.add_filter(p)
end
            
new() click to toggle source
 
               # File tracer.rb, line 36
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 141
def Tracer.off
  Single.off
end
            
on() click to toggle source
 
               # File tracer.rb, line 133
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 145
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 72
def add_filter(p = proc)
  @filters.push p
end
            
get_line(file, line) click to toggle source
 
               # File tracer.rb, line 80
def get_line(file, line)
  if p = @get_line_procs[file]
    return p.call(line)
  end

  unless list = SCRIPT_LINES__[file]
    begin
      f = 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 105
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 67
def off
  set_trace_func nil
  stdout.print "Trace off\n" if Tracer.verbose?
end
            
on() click to toggle source
 
               # File tracer.rb, line 53
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 76
def set_get_line_procs(file, p = proc)
  @get_line_procs[file] = p
end
            
stdout() click to toggle source
 
               # File tracer.rb, line 49
def stdout
  Tracer.stdout
end
            
trace_func(event, file, line, id, binding, klass, *) click to toggle source
 
               # File tracer.rb, line 113
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
  
  # saved_crit = Thread.critical
  # Thread.critical = true
  stdout.printf("#%d:%s:%d:%s:%s: %s",
    get_thread_no,
    file,
    line,
    klass || '',
    EVENT_SYMBOL[event],
    line == 0 ? "?\n" : get_line(file, line))
  # Thread.critical = saved_crit
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