From: ko1@... Date: 2021-03-15T04:19:48+00:00 Subject: [ruby-core:102859] [Ruby master Bug#11335] `ruby -r debug` catchpoint problem Issue #11335 has been updated by ko1 (Koichi Sasada). Status changed from Open to Closed I'm rewriting lib/debug.rb with TracePoint. And I close this ticket because it is too old. Ruby 3.1 will have better debugger by default :) ---------------------------------------- Bug #11335: `ruby -r debug` catchpoint problem https://bugs.ruby-lang.org/issues/11335#change-90917 * Author: sigsys (Math Ieu) * Status: Closed * Priority: Normal * ruby -v: ruby 2.1.6p336 (2015-04-13 revision 50298) [i386-freebsd10] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- With a `test-debug.rb` like this: ~~~ raise 'test' ~~~ And starting the debugger like this: ~~~ ruby -r debug test-debug.rb ~~~ By default, the catchpoint is `StandardError`, but it doesn't work: ~~~ test-debug.rb:1:raise 'test' (rdb:1) catch Catchpoint StandardError. (rdb:1) c test-debug.rb:1:in `
': test (RuntimeError) ~~~ And the debugger exits without catching the exception. But, by setting the catchpoint to `NilClass` (or one of its ancestors), then it works: ~~~ test-debug.rb:1:raise "test" (rdb:1) catch NilClass Set catchpoint NilClass. (rdb:1) c test-debug.rb:1: `' (NilClass) from test-debug.rb:1:in `
' test-debug.rb:1:raise "test" ~~~ And the debugger does not exit and allows further debugging. By looking at `lib/debug.rb`, it looks like that the `set_trace_func` callback it sets assumes that `$!` will be set to the exception to be raised when a `'raise'` event occurs. But it is not the case, `$!` seems to always be `nil`. -- https://bugs.ruby-lang.org/ Unsubscribe: