# class Byebug::Runner

Responsible for starting the debugger when started from the command line.

### Attributes

help[R]

Special working modes that don't actually start the debugger.

init_script[W]

Signals that we should run rc scripts before program starts

quit[RW]

Signals that we should exit after the debugged program is finished.

remote[R]

Special working modes that don't actually start the debugger.

stop[RW]

Signals that we should stop before program starts

version[R]

Special working modes that don't actually start the debugger.

### Public Class Methods

new(stop = true, quit = true) click to toggle source

@param stop [Boolean] Whether the runner should stop right before starting the program.

@param quit [Boolean] Whether the runner should quit right after finishing the program.

    # File lib/byebug/runner.rb, line 49
    def initialize(stop = true, quit = true)
      @stop = stop
      @quit = quit
    end

### Public Instance Methods

banner() click to toggle source

Usage banner.

    # File lib/byebug/runner.rb, line 81
        def banner
          prettify <<-BANNER
            byebug #{Byebug::VERSION}

            Usage: byebug [options] <script.rb> -- <script.rb parameters>
          BANNER
        end

debug_program() click to toggle source

Debugs a script only if syntax checks okay.

    # File lib/byebug/runner.rb, line 185
    def debug_program
      error = Byebug.debug_load(program, stop)
      puts "#{error}\n#{error.backtrace}" if error
    end

error_in_script?() click to toggle source

There is an error with the specified script

    # File lib/byebug/runner.rb, line 148
    def error_in_script?
      no_script? || non_existing_script? || invalid_script?
    end

help=(text) click to toggle source

    # File lib/byebug/runner.rb, line 54
    def help=(text)
      @help ||= text

      interface.puts("#{text}\n")
    end

init_script() click to toggle source

    # File lib/byebug/runner.rb, line 74
    def init_script
      defined?(@init_script) ? @init_script : true
    end

interface() click to toggle source

    # File lib/byebug/runner.rb, line 111
    def interface
      @interface ||= Context.interface
    end

invalid_script?() click to toggle source

Checks the debugged script has correct syntax

    # File lib/byebug/runner.rb, line 175
    def invalid_script?
      return false if syntax_valid?(File.read(program))

      print_error("The script has incorrect syntax")
      true
    end

no_script?() click to toggle source

No script to debug specified

    # File lib/byebug/runner.rb, line 155
    def no_script?
      return false unless $ARGV.empty?

      print_error("You must specify a program to debug")
      true
    end

non_existing_script?() click to toggle source

Extracts debugged program from command line args.

    # File lib/byebug/runner.rb, line 165
    def non_existing_script?
      return false if program

      print_error("The script doesn't exist")
      true
    end

non_script_option?() click to toggle source

An option that doesn't need a script specified was given

    # File lib/byebug/runner.rb, line 141
    def non_script_option?
      version || help || remote
    end

option_parser() click to toggle source

Processes options passed from the command line.

    # File lib/byebug/runner.rb, line 118
    def option_parser
      @option_parser ||= OptionParser.new(banner, 25) do |opts|
        opts.banner = banner

        OptionSetter.new(self, opts).setup
      end
    end

print_error(msg) click to toggle source

Prints an error message and a help string

    # File lib/byebug/runner.rb, line 193
    def print_error(msg)
      interface.errmsg(msg)
      interface.puts(option_parser.help)
    end

program() click to toggle source

    # File lib/byebug/runner.rb, line 126
    def program
      @program ||= begin
                     candidate = which($ARGV.shift)

                     if [which("ruby"), RbConfig.ruby].include?(candidate)
                       which($ARGV.shift)
                     else
                       candidate
                     end
                   end
    end

remote=(host_and_port) click to toggle source

    # File lib/byebug/runner.rb, line 68
    def remote=(host_and_port)
      @remote ||= Byebug.parse_host_and_port(host_and_port)

      Byebug.start_client(*@remote)
    end

run() click to toggle source

Starts byebug to debug a program.

    # File lib/byebug/runner.rb, line 92
    def run
      Byebug.mode = :standalone

      option_parser.order!($ARGV)
      return if non_script_option? || error_in_script?

      $PROGRAM_NAME = program

      Byebug.run_init_script if init_script

      loop do
        debug_program

        break if quit

        ControlProcessor.new(nil, interface).process_commands
      end
    end

version=(number) click to toggle source

    # File lib/byebug/runner.rb, line 60
        def version=(number)
          @version ||= number

          interface.puts prettify <<-VERSION
            Running byebug #{number}
          VERSION
        end