module Byebug # Mix-in module to showing settings module ShowFunctions def show_setting(setting_name) case setting_name when /^args$/ if Command.settings[:argv] and Command.settings[:argv].size > 0 if defined?(Byebug::BYEBUG_SCRIPT) # byebug was called initially. 1st arg is script name. args = Command.settings[:argv][1..-1].join(' ') else # byebug wasn't called initially. 1st arg is not script name. args = Command.settings[:argv].join(' ') end else args = '' end return "Argument list to give program being debugged when it is started is \"#{args}\"." when /^autolist$/ on_off = Command.settings[:autolist] > 0 return "autolist is #{show_onoff(on_off)}." when /^autoeval$/ on_off = Command.settings[:autoeval] return "autoeval is #{show_onoff(on_off)}." when /^autoreload$/ on_off = Command.settings[:autoreload] return "autoreload is #{show_onoff(on_off)}." when /^autoirb$/ on_off = Command.settings[:autoirb] > 0 return "autoirb is #{show_onoff(on_off)}." when /^basename$/ on_off = Command.settings[:basename] return "basename is #{show_onoff(on_off)}." when /^callstyle$/ style = Command.settings[:callstyle] return "Frame call-display style is #{style}." when /^commands(:?\s+(\d+))?$/ if @state.interface.readline_support? s = ''; args = @match[1].split if args[1] first_line = args[1].to_i - 4 last_line = first_line + 10 - 1 if first_line > Readline::HISTORY.length first_line = last_line = Readline::HISTORY.length elsif first_line <= 0 first_line = 1 end if last_line > Readline::HISTORY.length last_line = Readline::HISTORY.length end i = first_line commands = Readline::HISTORY.to_a[first_line..last_line] else if Readline::HISTORY.length > 10 commands = Readline::HISTORY.to_a[-10..-1] i = Readline::HISTORY.length - 10 else commands = Readline::HISTORY.to_a i = 1 end end commands.each do |cmd| s += ("%5d %s\n" % [i, cmd]) i += 1 end else s='No readline support' end return s when /^testing$/ on_off = Command.settings[:testing] return "Currently testing byebug is #{show_onoff(on_off)}." when /^forcestep$/ on_off = Command.settings[:forcestep] return "force-stepping is #{show_onoff(on_off)}." when /^fullpath$/ on_off = Command.settings[:fullpath] return "Displaying frame's full file names is #{show_onoff(on_off)}." when /^history(:?\s+(filename|save|size))?$/ args = @match[1].split interface = @state.interface if args[1] show_save = show_size = show_filename = false prefix = false if args[1] == "save" show_save = true elsif args[1] == "size" show_size = true elsif args[1] == "filename" show_filename = true end else show_save = show_size = show_filename = true prefix = true end s = [] if show_filename msg = "#{prefix ? 'filename:' : ''} The command history file is " \ "#{interface.histfile.inspect}" s << msg end if show_save msg = (prefix ? "save: " : "") + "Saving of history save is #{show_onoff(interface.history_save)}." s << msg end if show_size msg = (prefix ? "size: " : "") + "Byebug history size is #{interface.history_length}" s << msg end return s.join("\n") when /^linetrace$/ on_off = Byebug.tracing? return "line tracing is #{show_onoff(on_off)}." when /^linetrace_plus$/ if Command.settings[:linetrace_plus] return "line tracing style is every line." else return "line tracing style is different consecutive lines." end when /^listsize$/ listlines = Command.settings[:listsize] return "Number of source lines to list is #{listlines}." when /^post_mortem$/ on_off = Byebug.post_mortem? return "post-mortem mode is #{show_onoff(on_off)}" when /^stack_on_error$/ on_off = Command.settings[:stack_on_error] return "Displaying stack trace is #{show_onoff(on_off)}." when /^verbose$/ on_off = Byebug.verbose return "Verbose output of TracePoint API events is #{show_onoff(on_off)}." when /^version$/ return "Byebug #{Byebug::VERSION}" when /^width$/ return "width is #{Command.settings[:width]}." else return "Unknown show subcommand #{setting_name}." end end end # Implements byebug "show" command. class ShowCommand < Command Subcommands = [ ['args' , 2 , 'Show argument list to the program being ' \ 'debugged when it is started' ], ['autoeval' , 4 , 'Show whether unrecognized commands are ' \ 'evaluated' ], ['autolist' , 4 , 'Show whether "list" command is run on stopping' ], ['autoirb' , 4 , 'Show whether IRB is invoked on stopping' ], ['autoreload' , 4 , 'Show whether source code is reloaded when ' \ 'changed' ], ['basename' , 1 , 'Show whether basename is used when reporting' \ ' files' ], ['callstyle' , 2 , 'Show parameter style used when showing call' \ ' frames' ], ['commands' , 2 , 'Show the history of commands you typed. You ' \ 'can supply a command number to start with' ], ['forcestep' , 1 , 'Show whether "next/step" commands are set to' \ ' always move to a line' ], ['fullpath' , 2 , 'Show whether full paths are displayed in frames'], ['history' , 2 , 'Show command history configurations. ' ], ['linetrace' , 3 , 'Show line execution tracing status' ], ['linetrace_plus', 10, 'Show whether different consecutive lines are' \ ' shown in tracing' ], ['listsize' , 3 , 'Show number of source lines to list by default' ], ['post_mortem' , 3 , 'Show whether we should go into post-mortem ' \ 'debugging on an uncaught exception' ], ['stack_on_error', 1 , 'Show whether a stack trace is displayed when' \ ' "eval" raises an exception' ], ['verbose' , 4 , 'Show whether verbose output for debugging ' \ 'byebug itself is enabled' ], ['version' , 1 , 'Show byebug\'s version' ], ['width' , 1 , 'Show the number of characters per line for ' \ 'byebug' ] ].map do |name, min, help| Subcmd.new(name, min, help) end unless defined?(Subcommands) ShowHistorySubcommands = [ ['filename', 1, 'Show the filename in which to record command history' ], ['save' , 1, 'Show whether history record should be saved on exit' ], ['size' , 1, 'Show the size of the command history' ] ].map do |name, min, help| Subcmd.new(name, min, help) end unless defined?(SetHistorySubcommands) self.allow_in_control = true def regexp /^\s* show (?:\s+(.+))? \s*$/x end def execute return print ShowCommand.help(nil) unless @match[1] args = @match[1].split(/[ \t]+/) param = args.shift subcmd = Command.find(Subcommands, param) if subcmd print "%s\n" % show_setting(subcmd.name) else print "Unknown show command #{param}\n" end end class << self def names %w(show) end def description %{Generic command for showing things about byebug.} end end end end