Project

General

Profile

Actions

Feature #17863

closed

rewrite lib/debug.rb with latest API

Added by ko1 (Koichi Sasada) over 3 years ago. Updated almost 3 years ago.

Status:
Closed
Target version:
-
[ruby-core:103841]

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
  • 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 like binding.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 like p obj.foo.

Now you can try on 2.6-master with gem install debug --pre.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0