execute (Debugger::AddBreakpoint)

    # File cli/ruby-debug/commands/breakpoints.rb, line 16
        def execute
          if @match[1]
            line, _, _, expr = @match.captures
          else
            _, file, line, expr = @match.captures
          end
          if expr
            if expr !~ /^\s*if\s+(.+)/
              if file or line
                errmsg "Expecting 'if' in breakpoint condition; got: #{expr}.\n"
              else
                errmsg "Invalid breakpoint location: #{expr}.\n"
              end
              return
            else
              expr = $1
            end
          end

          brkpt_filename = nil
          if file.nil?
            unless @state.context
              errmsg "We are not in a state that has an associated file.\n"
              return
            end
            brkpt_filename = @state.file
            file = File.basename(@state.file)
            if line.nil?
              # Set breakpoint at current line
              line = @state.line.to_s
            end
          elsif line !~ /^\d+$/
            # See if "line" is a method/function name
            klass = debug_silent_eval(file)
            if klass && klass.kind_of?(Module)
              class_name = klass.name if klass
            else
              errmsg "Unknown class #{file}.\n"
              throw :debug_error
            end
          else
            # FIXME: This should be done in LineCache.
            file = File.expand_path(file) if file.index(File::SEPARATOR) || \
            File::ALT_SEPARATOR && file.index(File::ALT_SEPARATOR)
            brkpt_filename = file
          end

          if line =~ /^\d+$/
            line = line.to_i
            if LineCache.cache(brkpt_filename, Command.settings[:reload_source_on_change])
              last_line = LineCache.size(brkpt_filename)
              if line > last_line
                errmsg("There are only %d lines in file \"%s\".\n", last_line, file)
                return
              end
              unless LineCache.trace_line_numbers(brkpt_filename).member?(line)
                errmsg("Line %d is not a stopping point in file \"%s\".\n", line, file)
                return
              end
            else
              errmsg("No source file named %s\n" % file)
              return unless confirm("Set breakpoint anyway? (y/n) ")
            end

            unless @state.context
              errmsg "We are not in a state we can add breakpoints.\n"
              return
            end
            b = Debugger.add_breakpoint file, line, expr
            print "Breakpoint %d file %s, line %s\n", b.id, brkpt_filename, line.to_s
            unless syntax_valid?(expr)
              errmsg("Expression \"#{expr}\" syntactically incorrect; breakpoint disabled.\n")
              b.enabled = false
            end
          else
            method = line.intern.id2name
            b = Debugger.add_breakpoint class_name, method, expr
            print "Breakpoint %d at %s::%s\n", b.id, class_name, method.to_s
          end
        end