From: sigsys@... Date: 2015-07-05T11:27:25+00:00 Subject: [ruby-core:69878] [Ruby trunk - Bug #11335] [Open] `ruby -r debug` catchpoint problem Issue #11335 has been reported by Math Ieu. ---------------------------------------- Bug #11335: `ruby -r debug` catchpoint problem https://bugs.ruby-lang.org/issues/11335 * Author: Math Ieu * Status: Open * Priority: Normal * Assignee: * 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/