Class Debugger::IRBCommand
In: cli/ruby-debug/commands/irb.rb
Parent: Command

Implements debugger "irb" command.

Methods

execute   help   help_command   regexp  

Public Class methods

[Source]

     # File cli/ruby-debug/commands/irb.rb, line 172
172:       def help(cmd)
173:         %{
174:           irb [-d]\tstarts an Interactive Ruby (IRB) session.
175: 
176: If -d is added you can get access to debugger state via the global variable
177: $rdebug_state. 
178: 
179: irb is extended with methods "cont", "n", "step" and "q" which run the
180: corresponding debugger commands. In contrast to the real debugger
181: commands these commands do not allow command arguments.
182: 
183: However to run any arbitrary rdebug command which does not involve
184: execution of the debugged program (like the above "step" "cont", etc.)
185: use method "dbgr" and give an array of string parameters. For example:
186: 
187: dbgr ['list', '10']   # same as "list 10" inside debugger
188:         }
189:       end

[Source]

     # File cli/ruby-debug/commands/irb.rb, line 168
168:       def help_command
169:         'irb'
170:       end

Public Instance methods

[Source]

     # File cli/ruby-debug/commands/irb.rb, line 123
123:     def execute
124:       unless @state.interface.kind_of?(LocalInterface)
125:         print "Command is available only in local mode.\n"
126:         throw :debug_error
127:       end
128: 
129:       save_trap = trap("SIGINT") do
130:         throw :IRB_EXIT, :cont if $rdebug_in_irb
131:       end
132: 
133:       # add_debugging = @match.is_a?(Array) && '-d' == @match[1]
134:       $rdebug_state = @state
135:       $rdebug_in_irb = true
136:       cont = IRB.start_session(get_binding)
137:       case cont
138:       when :cont
139:         @state.proceed 
140:       when :step
141:         force = Command.settings[:force_stepping]
142:         @state.context.step(1, force)
143:         @state.proceed 
144:       when :next
145:         force = Command.settings[:force_stepping]
146:         @state.context.step_over(1, @state.frame_pos, force)
147:         @state.proceed 
148:       when :quit
149:         # FIXME: DRY with code from file/command quit.
150:         if confirm("Really quit? (y/n) ") 
151:           @state.interface.finalize
152:           exit! # exit -> exit!: No graceful way to stop threads...
153:         end
154:       else
155:         file = @state.context.frame_file(0)
156:         line = @state.context.frame_line(0)
157:         CommandProcessor.print_location_and_text(file, line)
158:         @state.previous_line = nil
159:       end
160: 
161:     ensure
162:       $rdebug_in_irb = nil
163:       $rdebug_state = nil
164:       trap("SIGINT", save_trap) if save_trap
165:     end

[Source]

     # File cli/ruby-debug/commands/irb.rb, line 117
117:     def regexp
118:       /^\s* irb
119:         (?:\s+(-d))?
120:         \s*$/x
121:     end

[Validate]