class DEBUGGER__::Tracer

Attributes

key[R]
type[R]

Public Class Methods

new(ui, pattern: nil, into: nil) click to toggle source
# File debug-1.4.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.4.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.4.0/lib/debug/tracer.rb, line 57
def description
  nil
end
disable() click to toggle source
# File debug-1.4.0/lib/debug/tracer.rb, line 53
def disable
  @tracer.disable
end
enable() click to toggle source
# File debug-1.4.0/lib/debug/tracer.rb, line 49
def enable
  @tracer.enable
end
header(depth) click to toggle source
# File debug-1.4.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.4.0/lib/debug/tracer.rb, line 99
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.4.0/lib/debug/tracer.rb, line 84
def out tp, msg = nil, depth = caller.size - 1
  location_str = colorize("#{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
  end
end
puts(msg) click to toggle source
# File debug-1.4.0/lib/debug/tracer.rb, line 95
def puts msg
  @output.puts msg
end
skip?(tp) click to toggle source
# File debug-1.4.0/lib/debug/tracer.rb, line 68
def skip? tp
  if tp.path.start_with?(__dir__) ||
     tp.path.start_with?('<internal:') ||
     ThreadClient.current.management? ||
     skip_path?(tp.path) ||
     skip_with_pattern?(tp)
    true
  else
    false
  end
end
skip_with_pattern?(tp) click to toggle source
# File debug-1.4.0/lib/debug/tracer.rb, line 80
def skip_with_pattern?(tp)
  @pattern && !tp.path.match?(@pattern)
end
to_s() click to toggle source
# File debug-1.4.0/lib/debug/tracer.rb, line 61
def to_s
  s = "#{@name}#{description} (#{@tracer.enabled? ? 'enabled' : 'disabled'})"
  s += " with pattern #{@pattern.inspect}" if @pattern
  s += " into: #{@into}" if @into
  s
end