class DEBUGGER__::CatchBreakpoint

def description

def description
  "#{@last_exc.inspect} is raised."
end

def initialize pat, cond: nil, command: nil, path: nil

def initialize pat, cond: nil, command: nil, path: nil
  @pat = pat.freeze
  @key = [:catch, @pat].freeze
  @last_exc = nil
  super(cond, command, path)
end

def setup

def setup
  @tp = TracePoint.new(:raise){|tp|
    exc = tp.raised_exception
    next if SystemExit === exc
    next if skip_path?(tp.path)
    next if !safe_eval(tp.binding, @cond) if @cond
    should_suspend = false
    exc.class.ancestors.each{|cls|
      if @pat === cls.name
        should_suspend = true
        @last_exc = exc
        break
      end
    }
    suspend if should_suspend
  }
end

def to_s

def to_s
  "#{generate_label("Catch")} #{@pat.inspect}"
end