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]
interface[R]
prev_line[RW]

Public Class Methods

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

  @proceed = false
  @prev_line = nil
end

Public Instance Methods

at_breakpoint(brkpt) click to toggle source
# File lib/byebug/processors/command_processor.rb, line 63
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 69
def at_catchpoint(exception)
  puts "Catchpoint at #{context.location}: `#{exception}'"
end
at_end() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 79
def at_end
  process_commands
end
at_line() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 53
def at_line
  process_commands
end
at_return(return_value) click to toggle source
# File lib/byebug/processors/command_processor.rb, line 73
def at_return(return_value)
  puts "Return value is: #{safe_inspect(return_value)}"

  process_commands
end
at_tracing() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 57
def at_tracing
  puts "Tracing: #{context.full_location}"

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

Available commands

# File lib/byebug/processors/command_processor.rb, line 49
def command_list
  @command_list ||= CommandList.new(commands)
end
printer() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 30
def printer
  @printer ||= Printers::Plain.new
end
proceed!() click to toggle source

Let the execution continue

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

Handle byebug commands.

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

  repl
ensure
  after_repl
end

Protected Instance Methods

after_repl() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 118
def after_repl
  interface.autosave
end
before_repl() click to toggle source
# File lib/byebug/processors/command_processor.rb, line 110
def before_repl
  @proceed = false
  @prev_line = nil

  run_auto_cmds(1)
  interface.autorestore
end
prompt() click to toggle source

Prompt shown before reading a command.

# File lib/byebug/processors/command_processor.rb, line 106
def prompt
  "(byebug) "
end
repl() click to toggle source

Main byebug's REPL

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

    next if cmd == ""

    run_cmd(cmd)
  end
end

Private Instance Methods

auto_cmds_for(run_level) click to toggle source
# File lib/byebug/processors/command_processor.rb, line 138
def auto_cmds_for(run_level)
  command_list.select { |cmd| cmd.always_run >= run_level }
end
run_auto_cmds(run_level) click to toggle source

Run permanent commands.

# File lib/byebug/processors/command_processor.rb, line 145
def run_auto_cmds(run_level)
  safely do
    auto_cmds_for(run_level).each { |cmd| cmd.new(self).execute }
  end
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 157
def run_cmd(input)
  safely do
    command = command_list.match(input)
    return command.new(self, input).execute if command

    puts safe_inspect(multiple_thread_eval(input))
  end
end
safely() { || ... } click to toggle source
# File lib/byebug/processors/command_processor.rb, line 166
def safely
  yield
rescue StandardError => e
  errmsg(e.message)
end