Your environment
ruby -v: ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +PRISM [x86_64-darwin24]rdbg -v: rdbg 1.11.0
Describe the bug
Recording can't handle BasicObject. It crashes whenever execution enters any method in a BasicObject or its descendants.
To Reproduce
Here's a simple script that demonstrates the issue.
classTest < BasicObjectdeftest42endendTest.new.test
Load it into rbdg, enable recording (record on) and run it (continue).
Expected behavior
Should record execution without issues.
Additional context
The exception backtrace:
(eval at /Users/pointlessone/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/debug-1.11.0/lib/debug/thread_client.rb:1313):1:in 'Test#test': undefined local variable or method '__callee__' for an instance of Test (NameError)
from /Users/pointlessone/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/debug-1.11.0/lib/debug/thread_client.rb:1313:in 'Binding#eval'
from /Users/pointlessone/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/debug-1.11.0/lib/debug/thread_client.rb:1313:in 'block (2 levels) in DEBUGGER__::ThreadClient::Recorder#initialize'
from /Users/pointlessone/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/debug-1.11.0/lib/debug/thread_client.rb:1307:in 'Array#each'
from /Users/pointlessone/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/debug-1.11.0/lib/debug/thread_client.rb:1307:in 'block in DEBUGGER__::ThreadClient::Recorder#initialize'
from test.rb:3:in 'Test#test'
from test.rb:7:in '<main>'
It looks like [ThreadClient][https://github.com/ruby/debug/blob/14c8a546242a5e88ed8f47607629ffbef7d3315d/lib/debug/thread_client.rb#L1313] is trying to execute __callee__ within the frame. The method is defined in Kernel which is not included in BasicObject.
It seems simply calling the method directly on the Kernel might fix it.
- frame._callee = b.eval('__callee__')+ frame._callee = b.eval('::Kernel.__callee__')
Your environment
ruby -v:ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +PRISM [x86_64-darwin24]rdbg -v:rdbg 1.11.0Describe the bug
Recording can't handle
BasicObject. It crashes whenever execution enters any method in aBasicObjector its descendants.To Reproduce
Here's a simple script that demonstrates the issue.
Load it into
rbdg, enable recording (record on) and run it (continue).Expected behavior
Should record execution without issues.
Additional context
The exception backtrace:
It looks like [ThreadClient][https://github.com/ruby/debug/blob/14c8a546242a5e88ed8f47607629ffbef7d3315d/lib/debug/thread_client.rb#L1313] is trying to execute
__callee__within the frame. The method is defined inKernelwhich is not included inBasicObject.It seems simply calling the method directly on the
Kernelmight fix it.