From: "st0012 (Stan Lo) via ruby-core" <ruby-core@...> Date: 2023-05-15T13:06:04+00:00 Subject: [ruby-core:113493] [Ruby master Feature#19572] Add a new TracePoint event for rescued exceptions Issue #19572 has been updated by st0012 (Stan Lo). We discussed this at the [RubyKaigi dev-meeting](https://bugs.ruby-lang.org/issues/19599) as a topic and I also did a follow up discussion with @ko1. IIRC, the conclusion was: - This `rescue` event is only for Ruby-level rescue. If there's a need for C-level rescue tracking, we may introduce a `c_rescue` event, but I currently don't have a plan for it. - Instead of adding `TP#rescued_exception`, @ko1 suggested using the `raised_exception` API for now. Consider `rescue` will likely be used with `raise` together, using the same API to access the exception can simplify implementation, so I agree with it. - There was no objection in introducing this event. - @ko1 was ok with adopting it in `ruby/debug`'s `ExceptionTracer`. @ko1 is there anything I missed or you may want to add? ---------------------------------------- Feature #19572: Add a new TracePoint event for rescued exceptions https://bugs.ruby-lang.org/issues/19572#change-103078 * Author: st0012 (Stan Lo) * Status: Open * Priority: Normal ---------------------------------------- **Summary** Support a new `rescue` event type in TracePoint. When the event is triggered, `TracePoint#rescued_exception` can be used to access the exception. **Reason** Currently, TracePoint supports `raise` events, which can be helpful for debugging by showing which exception occurs at which location. By adding a `rescue` event type, we can improve the developer's debugging experience by making it easier to check where an exception is rescued. Currently, the most effective way to check where an exception is rescued involves setting a breakpoint at the exception's raised location and stepping through the code to see whether the debugger stops inside a rescue block. However, this can be a tedious process, especially in large applications with deep call stacks. By using a TracePoint event for rescue, developers can easily track exceptions as they are rescued by adding a few lines of code: ``` TracePoint.trace(:rescue) do |tp| puts "Exception rescued: #{tp.rescued_exception} at #{tp.path}:#{tp.lineno}" end ``` This new TracePoint event will also improve the `ruby/debug`'s [`ExceptionTracer`](https://github.com/ruby/debug/blob/master/lib/debug/tracer.rb#L150-L166) and provide users with a better debugging experience. -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/