views:

125

answers:

5

Is there any way to start the/a Ruby debugger whenever the code throws an exception, without me wrapping the code like this:

begin
  #do something
rescue
  debugger
end

I'd like to have it in such a way that if the do something part raises an exception, the debugger will start. It would be nice not having to modify the code to add begin rescue blocks all over.

+1  A: 
require 'ruby-debug'
class Exception
  alias original_initalize initialize
  def initialize(*args)
    original_initalize(*args)
    debugger
  end
end

This will run the original exception as well as call debugger

Unixmonkey
+1  A: 

if you're using ruby-debug (and it looks like you are), you can set catchPoints for the exception you want. c Exception for example

rogerdpack
+4  A: 

Hammertime!

Andrew Grimm
Hammertime (modeled after the Squeak exception behaviour) does exactly what you want.
severin
Yeah, but hammertime doesn't start if native code throws an exception.
Geo
+1  A: 

I stumbled across this page:post-mortem debugging. Doing this:

Debugger.start(:post_mortem => true)

gets me where I want to.

Geo
A: 

In RubyMine 2.0.x go to Run -> View Breakpoints and click "Ruby Exception Breakpoints" tab, then add the type of the exception you are interested in...

There should be something similar in NetBeans and other Ruby IDEs i guess.

BTW, RubyMine is the BEST!

Alex Kaushovik