From: Brent Roman Date: 2004-12-27T13:19:04+09:00 Subject: Re: Breakpoints on 1.6.8? I don't know if it's working "correctly", but it is functional. I liked the breakpoint idea so much that I distilled it into the following for 1.6.8: module IRB #normal usage is: # breakpoint binding #drops into another IRB session with the caller's binding #exit (optional return value) to resume the broken thread def IRB.breakpoint(workspace = nil, name="breakpoint") puts "At #{name}:" workspace = IRB::WorkSpace.new workspace if workspace.is_a? Binding @CONF[:MAIN_CONTEXT] = (irb = IRB::Irb.new(workspace)).context oldTrap = trap 'INT' do irb.signal_handle end result = catch :IRB_EXIT do begin irb.eval_input rescue Exception print $!.type, ": ", $!, "\n" retry end end trap ('INT', nil, &oldTrap) result end end def breakpoint (*args) IRB.breakpoint(*args) end The main limitation of this hack verses the real one is that the caller must explicitly pass the binding into the breakpoint. There's no "bindingOfCaller". If you'd like to take a crack at that, I'd be most grateful. -- Brent Roman mailto:brent@mbari.org http://www.mbari.org/~brent