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