From: "ko1 (Koichi Sasada) via ruby-core" <ruby-core@...> Date: 2023-05-09T04:21:55+00:00 Subject: [ruby-core:113423] [Ruby master Feature#19572] Add a new TracePoint event for rescued exceptions Issue #19572 has been updated by ko1 (Koichi Sasada). Sorry for late response. Two points: 1. How should we handle C level rescue? Some C code catch the exception. Should we trap it on this case? `rb_rescue()` is easy to implement this TP hook. However some core feature handle it without `rb_rescue()`, for example all exceptions are caught at the end of exception without `rb_rescue()`. For example only supports Ruby-level `rescue` is one idea, but not sure it can satisfice the purpose. 2. debugging experience > This new TracePoint event will also improve the ruby/debug's ExceptionTracer and provide users with a better debugging experience. Could you explain more with examples? ---------------------------------------- Feature #19572: Add a new TracePoint event for rescued exceptions https://bugs.ruby-lang.org/issues/19572#change-102996 * 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/