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