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
$rdebug_state = @state
$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
when :quit
if confirm("Really quit? (y/n) ")
@state.interface.finalize
exit!
end
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
trap("SIGINT", save_trap) if save_trap
end