class DEBUGGER__::ThreadClient::Recorder - debug: Ruby Standard Library Documentation

# class DEBUGGER__::ThreadClient::Recorder

### Attributes

backup_frames[RW]
index[R]
log[R]

### Public Class Methods

new() click to toggle source

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1291
    def initialize
      @log = []
      @index = 0
      @backup_frames = nil
      thread = Thread.current

      @tp_recorder ||= TracePoint.new(:line){|tp|
        next unless Thread.current == thread
        # can't be replaced by skip_location
        next if skip_internal_path?(tp.path)
        loc = caller_locations(1, 1).first
        next if skip_location?(loc)

        frames = DEBUGGER__.capture_frames(__dir__)
        frames.each{|frame|
          if b = frame.binding
            frame.binding = nil
            frame._local_variables = b.local_variables.map{|name|
              [name, b.local_variable_get(name)]
            }.to_h
            frame._callee = b.eval('__callee__')
          end
        }
        append(frames)
      }
    end

### Public Instance Methods

append(frames) click to toggle source

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1318
    def append frames
      @log << frames
    end

can_step_back?() click to toggle source

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1363
    def can_step_back?
      log.size > @index
    end

current_frame() click to toggle source

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1371
    def current_frame
      if @index == 0
        f = @backup_frames
        @backup_frames = nil
        f
      else
        frames = @log[log_index]
        frames
      end
    end

current_position() click to toggle source

for debugging

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1383
    def current_position
      puts "INDEX: #{@index}"
      li = log_index
      @log.each_with_index{|frame, i|
        loc = frame.first&.location
        prefix = i == li ? "=> " : '   '
        puts "#{prefix} #{loc}"
      }
    end

disable() click to toggle source

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1329
    def disable
      if @tp_recorder.enabled?
        @log.clear
        @tp_recorder.disable
      end
    end

enable() click to toggle source

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1322
    def enable
      unless @tp_recorder.enabled?
        @log.clear
        @tp_recorder.enable
      end
    end

enabled?() click to toggle source

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1336
    def enabled?
      @tp_recorder.enabled?
    end

log_index() click to toggle source

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1367
    def log_index
      @log.size - @index
    end

replaying?() click to toggle source

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1359
    def replaying?
      @index > 0
    end

step_back(iter) click to toggle source

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1340
    def step_back iter
      @index += iter
      if @index > @log.size
        @index = @log.size
      end
    end

step_forward(iter) click to toggle source

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1347
    def step_forward iter
      @index -= iter
      if @index < 0
        @index = 0
      end
    end

step_reset() click to toggle source

    # File debug-1.10.0/lib/debug/thread_client.rb, line 1354
    def step_reset
      @index = 0
      @backup_frames = nil
    end