class Byebug::Command
Parent class of all byebug commands.
Subclasses need to implement a `regexp` and an `execute` command.
Constants
- Subcmd
Attributes
allow_in_control[RW]
allow_in_post_mortem[W]
always_run[W]
Public Class Methods
new(state)
click to toggle source
# File lib/byebug/command.rb, line 19 def initialize(state) @match, @state = nil, state end
Protected Class Methods
allow_in_post_mortem()
click to toggle source
# File lib/byebug/command.rb, line 73 def allow_in_post_mortem !defined?(@allow_in_post_mortem) ? true : false end
always_run()
click to toggle source
# File lib/byebug/command.rb, line 77 def always_run @always_run ||= 0 end
commands()
click to toggle source
# File lib/byebug/command.rb, line 118 def commands @commands ||= [] end
find(subcmds, str)
click to toggle source
# File lib/byebug/command.rb, line 89 def find(subcmds, str) str.downcase! subcmds.each do |subcmd| if (str.size >= subcmd.min) && (subcmd.name[0..str.size - 1] == str) return subcmd end end nil end
format_subcmd(subcmd_name)
click to toggle source
# File lib/byebug/command.rb, line 100 def format_subcmd(subcmd_name) subcmd = find(self::Subcommands, subcmd_name) return "Invalid \"#{names.join('|')}\" " "subcommand \"#{args[1]}\"." unless subcmd "\n #{subcmd.help}.\n\n" end
format_subcmds()
click to toggle source
# File lib/byebug/command.rb, line 108 def format_subcmds header = names.join('|') s = " List of \"#{header}\" subcommands:\n --\n" w = self::Subcommands.map(&:name).max_by(&:size).size self::Subcommands.each do |subcmd| s += format(" %s %-#{w}s -- %s\n", header, subcmd.name, subcmd.help) end s + "\n" end
help(subcmd = nil)
click to toggle source
# File lib/byebug/command.rb, line 81 def help(subcmd = nil) return format_subcmd(subcmd) if subcmd output = description output += format_subcmds if defined? self::Subcommands output end
inherited(klass)
click to toggle source
# File lib/byebug/command.rb, line 122 def inherited(klass) commands << klass end
Public Instance Methods
match(input)
click to toggle source
# File lib/byebug/command.rb, line 23 def match(input) @match = regexp.match(input) end
Protected Instance Methods
bb_eval(str, b = get_binding)
click to toggle source
Evaluates a string containing Ruby code, using binding b
. In
case of error full stack trace and error are printed.
# File lib/byebug/command.rb, line 39 def bb_eval(str, b = get_binding) b.eval(str) rescue StandardError, ScriptError => e at = e.backtrace locations = [] locations << "#{at.shift}: #{e.class} Exception(#{e.message})" locations += at.map { |path| "\tfrom #{path}" } errmsg(pr('eval.exception', text_message: locations.join("\n"))) nil end
bb_warning_eval(str, b = get_binding)
click to toggle source
Evaluates a string containing Ruby code, using binding b
. In
case of error, an error message with the exception is printed.
# File lib/byebug/command.rb, line 55 def bb_warning_eval(str, b = get_binding) b.eval(str) rescue StandardError, ScriptError => e text_message = "#{e.class} Exception: #{e.message}" errmsg(pr('eval.exception', text_message: text_message)) nil end
get_binding(pos = @state.frame)
click to toggle source
# File lib/byebug/command.rb, line 63 def get_binding(pos = @state.frame) @state.context ? @state.context.frame_binding(pos) : TOPLEVEL_BINDING end