Actions
Feature #17863
closedrewrite lib/debug.rb with latest API
Feature #17863:
rewrite lib/debug.rb with latest API
Description
I rewrite lib/debug.rb (called old debug.rb) with recent TracePoint APIs (called new debug.rb).
It has several incompatibility but maybe nobody uses lib/debug.rb so there is no compatible issues. In fact I tried several features of lib/debug.rb and it doesn't work nowaday.
You can see the doc on https://github.com/ruby/debug
Compare with existing other debuggers, it has several advantages:
- Fast: No performance penalty on non-stepping mode and non-breakpoints.
- Remote debugging: Support remote debugging natively.
- UNIX domain socket
- TCP/IP
- VSCode/DAP integration (TODO)
- Extensible: application can introduce debugging support with several methods
- By
rdbg
command - By loading libraries with
-r
command line option - By calling Ruby's method explicitly
- By
- Misc
- Support threads (almost done) and ractors (TODO).
- Support suspending and entering to the console debugging with
Ctrl-C
at most of timing. - Show parameters on backtrace command.
And do not need to write it on Gemfile because it will be a default gem from Ruby 3.1.
Important differences:
-
require 'debug'
is only a way to enable old debug.rb, but new debug.rb can be enabled with:- require
-
rdbg
command (like bybug) -
binding.bp
method likebinding.irb
- Support remote debugging
- Support several options like non-stop mode and so on
- old debug.rb evaluate unrecognized command as Ruby script, but new debug.rb doesn't allow this spec.
-
obj.foo
will be evaluated as Ruby script on old debug.rb (and byebug) - new debug.rb shows
unknown command
because it is typo safe and extension safe. - To see the result, you need to use
p
command likep obj.foo
.
-
Now you can try on 2.6-master with gem install debug --pre
.
Actions