class DEBUGGER__::DAP_TraceInspector::MultiTracer

Attributes

dropped_trace_cnt[RW]
log[R]

Public Class Methods

new(ui, evts, trace_params, max_log_size: nil, **kw) click to toggle source
Calls superclass method
# File debug-1.9.1/lib/debug/dap_custom/traceInspector.rb, line 4
def initialize ui, evts, trace_params, max_log_size: nil, **kw
  @evts = evts
  @log = []
  @trace_params = trace_params
  if max_log_size
    @max_log_size = max_log_size
  else
    @max_log_size = 50000
  end
  @dropped_trace_cnt = 0
  super(ui, **kw)
  @type = 'multi'
  @name = 'TraceInspector'
end

Public Instance Methods

append(log) click to toggle source
# File debug-1.9.1/lib/debug/dap_custom/traceInspector.rb, line 60
def append log
  if @log.size >= @max_log_size
    @dropped_trace_cnt += 1
    @log.shift
  end
  @log << log
end
call_identifier_str(tp) click to toggle source
# File debug-1.9.1/lib/debug/dap_custom/traceInspector.rb, line 52
def call_identifier_str tp
  if tp.defined_class
    minfo(tp)
  else
    "block"
  end
end
call_trace_log(tp, return_str: nil, params: nil) click to toggle source
# File debug-1.9.1/lib/debug/dap_custom/traceInspector.rb, line 68
def call_trace_log tp, return_str: nil, params: nil
  log = {
    depth: DEBUGGER__.frame_depth,
    name: call_identifier_str(tp),
    threadId: Thread.current.instance_variable_get(:@__thread_client_id),
    location: {
      path: tp.path,
      line: tp.lineno
    }
  }
  log[:returnValue] = return_str if return_str
  log[:parameters] = params if params && params.size > 0
  log
end
line_trace_log(tp) click to toggle source
# File debug-1.9.1/lib/debug/dap_custom/traceInspector.rb, line 83
def line_trace_log tp
  {
    depth: DEBUGGER__.frame_depth,
    threadId: Thread.current.instance_variable_get(:@__thread_client_id),
    location: {
      path: tp.path,
      line: tp.lineno
    }
  }
end
parameters_info(tp) click to toggle source
# File debug-1.9.1/lib/debug/dap_custom/traceInspector.rb, line 41
def parameters_info tp
  b = tp.binding
  tp.parameters.map{|_type, name|
    begin
      { name: name, value: DEBUGGER__.safe_inspect(b.local_variable_get(name), short: true, max_length: 4096) }
    rescue NameError, TypeError
      nil
    end
  }.compact
end
setup() click to toggle source
# File debug-1.9.1/lib/debug/dap_custom/traceInspector.rb, line 22
def setup
  @tracer = TracePoint.new(*@evts){|tp|
    next if skip?(tp)
  
    case tp.event
    when :call, :c_call, :b_call
      if @trace_params
        params = parameters_info tp
      end
      append(call_trace_log(tp, params: params))
    when :return, :c_return, :b_return
      return_str = DEBUGGER__.safe_inspect(tp.return_value, short: true, max_length: 4096)
      append(call_trace_log(tp, return_str: return_str))
    when :line
      append(line_trace_log(tp))
    end
  }
end
skip?(tp) click to toggle source
Calls superclass method
# File debug-1.9.1/lib/debug/dap_custom/traceInspector.rb, line 94
def skip? tp
  super || !@evts.include?(tp.event)
end
skip_with_pattern?(tp) click to toggle source
Calls superclass method
# File debug-1.9.1/lib/debug/dap_custom/traceInspector.rb, line 98
def skip_with_pattern?(tp)
  super && !tp.method_id&.match?(@pattern)
end