Class Tracer
In: tracer.rb
Parent: Object

tracer main class

Methods

Constants

EVENT_SYMBOL = { "line" => "-", "call" => ">", "return" => "<", "class" => "C", "end" => "E", "c-call" => ">", "c-return" => "<", }
Single = new

External Aliases

verbose -> verbose?

Attributes

stdout  [RW] 
verbose  [RW] 

Public Class methods

[Source]

# File tracer.rb, line 150
  def Tracer.add_filter(p = proc)
    Single.add_filter(p)
  end

[Source]

# File tracer.rb, line 37
  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

[Source]

# File tracer.rb, line 142
  def Tracer.off
    Single.off
  end

[Source]

# File tracer.rb, line 134
  def Tracer.on
    if block_given?
      Single.on{yield}
    else
      Single.on
    end
  end

[Source]

# File tracer.rb, line 146
  def Tracer.set_get_line_procs(file_name, p = proc)
    Single.set_get_line_procs(file_name, p)
  end

Public Instance methods

[Source]

# File tracer.rb, line 73
  def add_filter(p = proc)
    @filters.push p
  end

[Source]

# File tracer.rb, line 81
  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

[Source]

# File tracer.rb, line 106
  def get_thread_no
    if no = @threads[Thread.current.object_id]
      no
    else
      @threads[Thread.current.object_id] = @threads.size
    end
  end

[Source]

# File tracer.rb, line 68
  def off
    set_trace_func nil
    stdout.print "Trace off\n" if Tracer.verbose?
  end

[Source]

# File tracer.rb, line 54
  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

[Source]

# File tracer.rb, line 77
  def set_get_line_procs(file, p = proc)
    @get_line_procs[file] = p
  end

[Source]

# File tracer.rb, line 50
  def stdout
    Tracer.stdout
  end

[Source]

# File tracer.rb, line 114
  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],
      get_line(file, line))
    Thread.critical = saved_crit
  end

[Validate]

ruby-doc.org is hosted and maintained by James Britt and Happy Camper Studios, a Ruby application development company in Phoenix, Arizona. The site was created in 2002 as part of the Ruby Documentation Project to promote the Ruby language and to help other Ruby hackers.

Documentation content on ruby-doc.org is provided by remarkable members of the Ruby community.

For more information on the Ruby programming language, visit ruby-lang.org.

Want to help improve Ruby's API docs? See Ruby Documentation Guidelines.