class DEBUGGER__::Tracer - debug: Ruby Standard Library Documentation

# class DEBUGGER__::Tracer

### Attributes

key[R]
type[R]

### Public Class Methods

new(ui, pattern: nil, into: nil) click to toggle source

    # File debug-1.10.0/lib/debug/tracer.rb, line 19
    def initialize ui, pattern: nil, into: nil
      if /\ADEBUGGER__::(([A-Z][a-z]+?)[A-Z][a-z]+)/ =~ self.class.name
        @name = $1
        @type = $2.downcase
      end

      setup

      if pattern
        @pattern = Regexp.compile(pattern)
      else
        @pattern = nil
      end

      if @into = into
        @output = File.open(into, 'w')
        @output.puts "PID:#{Process.pid} #{self}"
      else
        @output = ui
      end

      @key = [@type, @pattern, @into].freeze

      enable
    end

### Public Instance Methods

colorize(str, color) click to toggle source
Calls superclass method `DEBUGGER__::Color#colorize`

    # File debug-1.10.0/lib/debug/tracer.rb, line 8
    def colorize(str, color)
      # don't colorize trace sent into a file
      if @into
        str
      else
        super
      end
    end

description() click to toggle source

    # File debug-1.10.0/lib/debug/tracer.rb, line 61
    def description
      nil
    end

disable() click to toggle source

    # File debug-1.10.0/lib/debug/tracer.rb, line 53
    def disable
      @tracer.disable
    end

enable() click to toggle source

    # File debug-1.10.0/lib/debug/tracer.rb, line 49
    def enable
      @tracer.enable
    end

enabled?() click to toggle source

    # File debug-1.10.0/lib/debug/tracer.rb, line 57
    def enabled?
      @tracer.enabled?
    end

header(depth) click to toggle source

    # File debug-1.10.0/lib/debug/tracer.rb, line 45
    def header depth
      "DEBUGGER (trace/#{@type}) \#th:#{Thread.current.instance_variable_get(:@__thread_client_id)} \#depth:#{'%-2d'%depth}"
    end

minfo(tp) click to toggle source

    # File debug-1.10.0/lib/debug/tracer.rb, line 92
    def minfo tp
      return "block{}" if tp.event == :b_call

      klass = tp.defined_class

      if klass.singleton_class?
        "#{tp.self}.#{tp.method_id}"
      else
        "#{klass}\##{tp.method_id}"
      end
    end

out(tp, msg = nil, depth = caller.size - 1) click to toggle source

    # File debug-1.10.0/lib/debug/tracer.rb, line 80
    def out tp, msg = nil, depth = caller.size - 1
      location_str = colorize("#{FrameInfo.pretty_path(tp.path)}:#{tp.lineno}", [:GREEN])
      buff = "#{header(depth)}#{msg} at #{location_str}"

      if false # TODO: Ractor.main?
        ThreadClient.current.on_trace self.object_id, buff
      else
        @output.puts buff
        @output.flush
      end
    end

skip?(tp) click to toggle source

    # File debug-1.10.0/lib/debug/tracer.rb, line 72
    def skip? tp
      ThreadClient.current.management? || skip_path?(tp.path) || skip_with_pattern?(tp)
    end

skip_with_pattern?(tp) click to toggle source

    # File debug-1.10.0/lib/debug/tracer.rb, line 76
    def skip_with_pattern?(tp)
      @pattern && !tp.path.match?(@pattern)
    end

to_s() click to toggle source

    # File debug-1.10.0/lib/debug/tracer.rb, line 65
    def to_s
      s = "#{@name}#{description} (#{@tracer.enabled? ? 'enabled' : 'disabled'})"
      s += " with pattern #{@pattern.inspect}" if @pattern
      s += " into: #{@into}" if @into
      s
    end