class Debugger::IRBCommand

Implements debugger "irb" command.

Public Class Methods

help(cmd) click to toggle source
# File cli/ruby-debug/commands/irb.rb, line 108
      def help(cmd)
        %Q{
          irb [-d]\tstarts an Interactive Ruby (IRB) session.

If -d is added you can get access to debugger state via the global variable
$RDEBUG_state. 

irb is extended with methods "cont", "n" and "step" which 
run the corresponding debugger commands. In contrast to the real debugger
commands these commands don't allow command arguments.
        }
      end
help_command() click to toggle source
# File cli/ruby-debug/commands/irb.rb, line 104
def help_command
  'irb'
end

Public Instance Methods

execute() click to toggle source
# File cli/ruby-debug/commands/irb.rb, line 65
def execute
  unless @state.interface.kind_of?(LocalInterface)
    print "Command is available only in local mode.\n"
    throw :debug_error
  end

  save_trap = trap("SIGINT") do
    throw :IRB_EXIT, :cont if $rdebug_in_irb
  end

  add_debugging = @match.is_a?(Array) && '-d' == @match[1]
  $rdebug_state = @state if add_debugging
  $rdebug_in_irb = true
  cont = IRB.start_session(get_binding)
  case cont
  when :cont
    @state.proceed 
  when :step
    force = Command.settings[:force_stepping]
    @state.context.step(1, force)
    @state.proceed 
  when :next
    force = Command.settings[:force_stepping]
    @state.context.step_over(1, @state.frame_pos, force)
    @state.proceed 
  else
    file = @state.context.frame_file(0)
    line = @state.context.frame_line(0)
    CommandProcessor.print_location_and_text(file, line)
    @state.previous_line = nil
  end

ensure
  $rdebug_in_irb = nil
  $rdebug_state = nil if add_debugging
  trap("SIGINT", save_trap) if save_trap
end
regexp() click to toggle source
# File cli/ruby-debug/commands/irb.rb, line 59
def regexp
  %r^\s* irb
    (?:\s+(-d))?
    \s*$/
end