class Byebug::CommandProcessor

Processes commands in regular mode.

You can override this class to create your own command processor that, for example, whitelists only certain commands to be executed.

@see PostMortemProcessor for a example

Attributes

context[R]
prev_line[RW]

Public Class Methods

new(context) click to toggle source
# File lib/byebug/processors/command_processor.rb, line 21
def initialize(context)
  @context = context

  @proceed = false
  @prev_line = nil
end

Public Instance Methods

at_breakpoint(brkpt) click to toggle source
# File lib/byebug/processors/command_processor.rb, line 58
def at_breakpoint(brkpt)
  number = Byebug.breakpoints.index(brkpt) + 1

  puts "Stopped by breakpoint #{number} at #{frame.file}:#{frame.line}"
end
at_catchpoint(exception) click to toggle source
# File lib/byebug/processors/command_processor.rb, line 64
def at_catchpoint(exception)
  puts "Catchpoint at #{context.location}: `#{exception}'"
end
at_line() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 74
def at_line
  process_commands
end
at_return() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 78
def at_return
  process_commands
end
at_tracing() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 68
def at_tracing
  puts "Tracing: #{context.full_location}"

  run_auto_commands(2)
end
command_list() click to toggle source

Available commands

# File lib/byebug/processors/command_processor.rb, line 50
def command_list
  @command_list ||= CommandList.new(commands)
end
commands() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 54
def commands
  Byebug.commands
end
frame() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 36
def frame
  @context.frame
end
interface() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 28
def interface
  @interface ||= context.class.interface
end
printer() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 32
def printer
  @printer ||= Printers::Plain.new
end
proceed!() click to toggle source

Let the execution continue

# File lib/byebug/processors/command_processor.rb, line 85
def proceed!
  @proceed = true
end
process_commands() click to toggle source

Handle byebug commands.

# File lib/byebug/processors/command_processor.rb, line 92
def process_commands
  before_repl

  repl
ensure
  after_repl
end

Protected Instance Methods

prompt() click to toggle source

Prompt shown before reading a command.

# File lib/byebug/processors/command_processor.rb, line 105
def prompt
  '(byebug) '
end

Private Instance Methods

after_repl() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 130
def after_repl
  interface.autosave
end
auto_commands_for(run_level) click to toggle source
# File lib/byebug/processors/command_processor.rb, line 111
def auto_commands_for(run_level)
  command_list.select { |cmd| cmd.always_run >= run_level }
end
before_repl() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 122
def before_repl
  @proceed = false
  @prev_line = nil

  run_auto_commands(1)
  interface.autorestore
end
repl() click to toggle source

Main byebug's REPL

# File lib/byebug/processors/command_processor.rb, line 137
def repl
  until @proceed
    cmd = interface.read_command(prompt)
    return if cmd.nil?

    next if cmd == ''

    run_cmd(cmd)
  end
end
run_auto_commands(run_level) click to toggle source

Run permanent commands.

# File lib/byebug/processors/command_processor.rb, line 118
def run_auto_commands(run_level)
  auto_commands_for(run_level).each { |cmd| cmd.new(self).execute }
end
run_cmd(input) click to toggle source

Executes the received input

Instantiates a command matching the input and runs it. If a matching command is not found, it evaluates the unknown input.

# File lib/byebug/processors/command_processor.rb, line 154
def run_cmd(input)
  command = command_list.match(input)
  return command.new(self, input).execute if command

  puts thread_safe_eval(input)
rescue => e
  errmsg(e.message)
end