debug 1.9.1 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/Gemfile +1 -0
 - data/README.md +42 -14
 - data/debug.gemspec +1 -0
 - data/ext/debug/debug.c +10 -10
 - data/lib/debug/config.rb +20 -0
 - data/lib/debug/console.rb +1 -1
 - data/lib/debug/irb_integration.rb +10 -0
 - data/lib/debug/prelude.rb +1 -1
 - data/lib/debug/server.rb +10 -1
 - data/lib/debug/server_cdp.rb +9 -10
 - data/lib/debug/server_dap.rb +1 -1
 - data/lib/debug/session.rb +16 -8
 - data/lib/debug/thread_client.rb +3 -6
 - data/lib/debug/version.rb +1 -1
 - data/misc/README.md.erb +39 -13
 - metadata +5 -6
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 0abb44ebe9baa650e6fe0b811044aa50a5d3f7cf0636579ae4991193cf1467ec
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 5decf010f8c581a30fe2543f6118541d0a34768b0d4f83451a728c47eeb6321c
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 1aad7e61ccedcb91f208a6edd92e0a255d8fb9e564b3b72dafceebbd88aff37b03500b63dc2e375874d27d7ad3767f174d70d3679cb3c47f31e29270952a5999
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 87d2cf298f30052fb0b4f91abea28d5310d7a235173ef04deb3dd27a66c1b9016add6714a2ff29a6483670a5b3245b38091d0a437ede4db61a0a0d45ecfcb773
         
     | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -13,10 +13,10 @@ New debug.rb has several advantages: 
     | 
|
| 
       13 
13 
     | 
    
         
             
              * TCP/IP
         
     | 
| 
       14 
14 
     | 
    
         
             
              * Integration with rich debugger frontends
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
                 Frontend  
     | 
| 
       17 
     | 
    
         
            -
                  
     | 
| 
       18 
     | 
    
         
            -
                 Connection 
     | 
| 
       19 
     | 
    
         
            -
                 Requirement | No 
     | 
| 
      
 16 
     | 
    
         
            +
                 | Frontend    | [Console](https://github.com/ruby/debug#invoke-as-a-remote-debuggee) | [VSCode](https://github.com/ruby/debug#vscode-integration)                                  | [Chrome DevTool](#chrome-devtool-integration) |
         
     | 
| 
      
 17 
     | 
    
         
            +
                 | ----------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------- |
         
     | 
| 
      
 18 
     | 
    
         
            +
                 | Connection  | UDS, TCP/IP                                                          | UDS, TCP/IP                                                                                 | TCP/IP                                        |
         
     | 
| 
      
 19 
     | 
    
         
            +
                 | Requirement | No                                                                   | [vscode-rdbg](https://marketplace.visualstudio.com/items?itemName=KoichiSasada.vscode-rdbg) | Chrome                                        |
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
            * Extensible: application can introduce debugging support in several ways:
         
     | 
| 
       22 
22 
     | 
    
         
             
              * By `rdbg` command
         
     | 
| 
         @@ -244,16 +244,16 @@ It will help if you want to know what the program is doing. 
     | 
|
| 
       244 
244 
     | 
    
         | 
| 
       245 
245 
     | 
    
         
             
            If you want to run a command written in Ruby like `rake`, `rails`, `bundle`, `rspec`, and so on, you can use `rdbg -c` option.
         
     | 
| 
       246 
246 
     | 
    
         | 
| 
       247 
     | 
    
         
            -
            * Without `-c` option, `rdbg <name>` means that `<name>` is Ruby script and  
     | 
| 
       248 
     | 
    
         
            -
            * With `-c` option, `rdbg -c <name>` means that `<name>` is a command in `PATH` and simply invokes it with the debugger.
         
     | 
| 
      
 247 
     | 
    
         
            +
            * Without the `-c` option, `rdbg <name>` means that `<name>` is a Ruby script and invokes it like `ruby <name>` with the debugger.
         
     | 
| 
      
 248 
     | 
    
         
            +
            * With the `-c` option, `rdbg -c <name>` means that `<name>` is a command in `PATH` and simply invokes it with the debugger.
         
     | 
| 
       249 
249 
     | 
    
         | 
| 
       250 
250 
     | 
    
         
             
            Examples:
         
     | 
| 
       251 
251 
     | 
    
         
             
            * `rdbg -c -- rails server`
         
     | 
| 
       252 
252 
     | 
    
         
             
            * `rdbg -c -- bundle exec ruby foo.rb`
         
     | 
| 
       253 
253 
     | 
    
         
             
            * `rdbg -c -- bundle exec rake test`
         
     | 
| 
       254 
     | 
    
         
            -
            * `rdbg -c -- ruby target.rb` is same as `rdbg target.rb`
         
     | 
| 
      
 254 
     | 
    
         
            +
            * `rdbg -c -- ruby target.rb` is the same as `rdbg target.rb`
         
     | 
| 
       255 
255 
     | 
    
         | 
| 
       256 
     | 
    
         
            -
            NOTE: `--` is needed to separate the command line options for `rdbg` and invoking command. For example, `rdbg -c rake -T` is recognized like `rdbg -c -T -- rake`. It should be `rdbg -c -- rake -T`.
         
     | 
| 
      
 256 
     | 
    
         
            +
            NOTE: `--` is needed to separate the command line options for `rdbg` and the invoking command. For example, `rdbg -c rake -T` is recognized like `rdbg -c -T -- rake`. It should be `rdbg -c -- rake -T`.
         
     | 
| 
       257 
257 
     | 
    
         | 
| 
       258 
258 
     | 
    
         
             
            NOTE: If you want to use bundler (`bundle` command), you need to write `gem debug` line in your `Gemfile`.
         
     | 
| 
       259 
259 
     | 
    
         | 
| 
         @@ -289,10 +289,10 @@ You can run your application as a remote debuggee, and the remote debugger conso 
     | 
|
| 
       289 
289 
     | 
    
         | 
| 
       290 
290 
     | 
    
         
             
            There are multiple ways to run your program as a debuggee:
         
     | 
| 
       291 
291 
     | 
    
         | 
| 
       292 
     | 
    
         
            -
            Stop at program start | [`rdbg` option](https://github.com/ruby/debug#rdbg---open-or-rdbg--o-for-short) | [require](https://github.com/ruby/debug#require-debugopen-in-a-program) | [debugger API](https://github.com/ruby/debug#start-by-method)
         
     | 
| 
       293 
     | 
    
         
            -
             
     | 
| 
       294 
     | 
    
         
            -
            Yes 
     | 
| 
       295 
     | 
    
         
            -
            No 
     | 
| 
      
 292 
     | 
    
         
            +
            | Stop at program start | [`rdbg` option](https://github.com/ruby/debug#rdbg---open-or-rdbg--o-for-short) | [require](https://github.com/ruby/debug#require-debugopen-in-a-program) | [debugger API](https://github.com/ruby/debug#start-by-method) |
         
     | 
| 
      
 293 
     | 
    
         
            +
            | --------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------- |
         
     | 
| 
      
 294 
     | 
    
         
            +
            | Yes                   | `rdbg --open`                                                                   | `require "debug/open"`                                                  | `DEBUGGER__.open`                                             |
         
     | 
| 
      
 295 
     | 
    
         
            +
            | No                    | `rdbg --open --nonstop`                                                         | `require "debug/open_nonstop"`                                          | `DEBUGGER__.open(nonstop: true)`                              |
         
     | 
| 
       296 
296 
     | 
    
         | 
| 
       297 
297 
     | 
    
         
             
            #### `rdbg --open` (or `rdbg -O` for short)
         
     | 
| 
       298 
298 
     | 
    
         | 
| 
         @@ -330,7 +330,9 @@ When `rdbg --attach` connects to the debuggee, you can use any debug commands (s 
     | 
|
| 
       330 
330 
     | 
    
         | 
| 
       331 
331 
     | 
    
         
             
            NOTE: If you use the `quit` command, only the remote console exits and the debuggee program continues to run (and you can connect it again). If you want to exit the debuggee program, use `kill` command.
         
     | 
| 
       332 
332 
     | 
    
         | 
| 
       333 
     | 
    
         
            -
            If you want to use TCP/IP for the remote debugging, you need to specify the port and host with `--port` like `rdbg --open --port 12345` and it binds to `localhost:12345`.
         
     | 
| 
      
 333 
     | 
    
         
            +
            If you want to use TCP/IP for the remote debugging, you need to specify the port and host with `--port` like `rdbg --open --port 12345` and it binds to `localhost:12345`. You can add an optional `--port_range` option to try multiple ports in a reliable way. For example, `rdbg --open --port 12345 --port_range 10` will try to bind to 12345, 12346, 12347, ... until it finds an available port.
         
     | 
| 
      
 334 
     | 
    
         
            +
             
     | 
| 
      
 335 
     | 
    
         
            +
            ```shell
         
     | 
| 
       334 
336 
     | 
    
         | 
| 
       335 
337 
     | 
    
         
             
            To connect to the debuggee, you need to specify the port.
         
     | 
| 
       336 
338 
     | 
    
         | 
| 
         @@ -499,6 +501,7 @@ config set no_color true 
     | 
|
| 
       499 
501 
     | 
    
         
             
            * REMOTE
         
     | 
| 
       500 
502 
     | 
    
         
             
              * `RUBY_DEBUG_OPEN` (`open`): Open remote port (same as `rdbg --open` option)
         
     | 
| 
       501 
503 
     | 
    
         
             
              * `RUBY_DEBUG_PORT` (`port`): TCP/IP remote debugging: port
         
     | 
| 
      
 504 
     | 
    
         
            +
              * `RUBY_DEBUG_PORT_RANGE` (`port_range`): TCP/IP remote debugging: length of port range
         
     | 
| 
       502 
505 
     | 
    
         
             
              * `RUBY_DEBUG_HOST` (`host`): TCP/IP remote debugging: host (default: 127.0.0.1)
         
     | 
| 
       503 
506 
     | 
    
         
             
              * `RUBY_DEBUG_SOCK_PATH` (`sock_path`): UNIX Domain Socket remote debugging: socket path
         
     | 
| 
       504 
507 
     | 
    
         
             
              * `RUBY_DEBUG_SOCK_DIR` (`sock_dir`): UNIX Domain Socket remote debugging: socket directory
         
     | 
| 
         @@ -713,7 +716,7 @@ The `<...>` notation means the argument. 
     | 
|
| 
       713 
716 
     | 
    
         
             
            * `eval <expr>`
         
     | 
| 
       714 
717 
     | 
    
         
             
              * Evaluate `<expr>` on the current frame.
         
     | 
| 
       715 
718 
     | 
    
         
             
            * `irb`
         
     | 
| 
       716 
     | 
    
         
            -
              *  
     | 
| 
      
 719 
     | 
    
         
            +
              * Activate and switch to `irb:rdbg` console
         
     | 
| 
       717 
720 
     | 
    
         | 
| 
       718 
721 
     | 
    
         
             
            ### Trace
         
     | 
| 
       719 
722 
     | 
    
         | 
| 
         @@ -784,6 +787,30 @@ The `<...>` notation means the argument. 
     | 
|
| 
       784 
787 
     | 
    
         
             
              * Show help for the given command.
         
     | 
| 
       785 
788 
     | 
    
         | 
| 
       786 
789 
     | 
    
         | 
| 
      
 790 
     | 
    
         
            +
            ### Using IRB as the Debug Console
         
     | 
| 
      
 791 
     | 
    
         
            +
             
     | 
| 
      
 792 
     | 
    
         
            +
            Starting from version `v1.9`, you can now use IRB as the debug console. This integration brings additional features such as:
         
     | 
| 
      
 793 
     | 
    
         
            +
             
     | 
| 
      
 794 
     | 
    
         
            +
            * Autocompletion
         
     | 
| 
      
 795 
     | 
    
         
            +
            * Support for multi-line input
         
     | 
| 
      
 796 
     | 
    
         
            +
            * Access to commands not available in `debug`, like `show_source` or `show_doc`
         
     | 
| 
      
 797 
     | 
    
         
            +
            * [Configurable command aliases](https://docs.ruby-lang.org/en/master/IRB.html#module-IRB-label-Command+Aliases)
         
     | 
| 
      
 798 
     | 
    
         
            +
             
     | 
| 
      
 799 
     | 
    
         
            +
            To switch to the IRB console, simply use the `irb` command in the debug console.
         
     | 
| 
      
 800 
     | 
    
         
            +
             
     | 
| 
      
 801 
     | 
    
         
            +
            Once activated, you'll notice the prompt changes to:
         
     | 
| 
      
 802 
     | 
    
         
            +
             
     | 
| 
      
 803 
     | 
    
         
            +
            ```txt
         
     | 
| 
      
 804 
     | 
    
         
            +
            irb:rdbg(main):001>
         
     | 
| 
      
 805 
     | 
    
         
            +
            ```
         
     | 
| 
      
 806 
     | 
    
         
            +
             
     | 
| 
      
 807 
     | 
    
         
            +
            If you want to make IRB the default console for all sessions, configure the `irb_console` setting by either:
         
     | 
| 
      
 808 
     | 
    
         
            +
             
     | 
| 
      
 809 
     | 
    
         
            +
            * Setting the `RUBY_DEBUG_IRB_CONSOLE=true` environment variable
         
     | 
| 
      
 810 
     | 
    
         
            +
            * Or adding `config set irb_console 1` to your `~/.rdbgrc`
         
     | 
| 
      
 811 
     | 
    
         
            +
             
     | 
| 
      
 812 
     | 
    
         
            +
            To disable the IRB console in the current session, execute `config set irb_console 0` in the console.
         
     | 
| 
      
 813 
     | 
    
         
            +
             
     | 
| 
       787 
814 
     | 
    
         
             
            ## Debugger API
         
     | 
| 
       788 
815 
     | 
    
         | 
| 
       789 
816 
     | 
    
         
             
            ### Start debugging
         
     | 
| 
         @@ -883,6 +910,7 @@ Debug console mode: 
     | 
|
| 
       883 
910 
     | 
    
         
             
                                                 Now rdbg, vscode and chrome is supported.
         
     | 
| 
       884 
911 
     | 
    
         
             
                    --sock-path=SOCK_PATH        UNIX Domain socket path
         
     | 
| 
       885 
912 
     | 
    
         
             
                    --port=PORT                  Listening TCP/IP port
         
     | 
| 
      
 913 
     | 
    
         
            +
                    --port-range=PORT_RANGE      Number of ports to try to connect to
         
     | 
| 
       886 
914 
     | 
    
         
             
                    --host=HOST                  Listening TCP/IP host
         
     | 
| 
       887 
915 
     | 
    
         
             
                    --cookie=COOKIE              Set a cookie for connection
         
     | 
| 
       888 
916 
     | 
    
         
             
                    --session-name=NAME          Session name
         
     | 
    
        data/debug.gemspec
    CHANGED
    
    | 
         @@ -14,6 +14,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
              spec.metadata["homepage_uri"] = spec.homepage
         
     | 
| 
       16 
16 
     | 
    
         
             
              spec.metadata["source_code_uri"] = spec.homepage
         
     | 
| 
      
 17 
     | 
    
         
            +
              spec.metadata["changelog_uri"] = "#{spec.homepage}/releases/tag/v#{spec.version}"
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
       18 
19 
     | 
    
         
             
              # Specify which files should be added to the gem when it is released.
         
     | 
| 
       19 
20 
     | 
    
         
             
              # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
         
     | 
    
        data/ext/debug/debug.c
    CHANGED
    
    | 
         @@ -8,13 +8,13 @@ static VALUE rb_mDebugger; 
     | 
|
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            // iseq
         
     | 
| 
       10 
10 
     | 
    
         
             
            typedef struct rb_iseq_struct rb_iseq_t;
         
     | 
| 
      
 11 
     | 
    
         
            +
            const rb_iseq_t *rb_iseqw_to_iseq(VALUE iseqw);
         
     | 
| 
       11 
12 
     | 
    
         
             
            VALUE rb_iseq_realpath(const rb_iseq_t *iseq);
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
            static VALUE
         
     | 
| 
       14 
15 
     | 
    
         
             
            iseq_realpath(VALUE iseqw)
         
     | 
| 
       15 
16 
     | 
    
         
             
            {
         
     | 
| 
       16 
     | 
    
         
            -
                 
     | 
| 
       17 
     | 
    
         
            -
                return rb_iseq_realpath(iseq);
         
     | 
| 
      
 17 
     | 
    
         
            +
                return rb_iseq_realpath(rb_iseqw_to_iseq(iseqw));
         
     | 
| 
       18 
18 
     | 
    
         
             
            }
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
            static VALUE rb_cFrameInfo;
         
     | 
| 
         @@ -121,26 +121,26 @@ frame_depth(VALUE self) 
     | 
|
| 
       121 
121 
     | 
    
         | 
| 
       122 
122 
     | 
    
         
             
            // iseq
         
     | 
| 
       123 
123 
     | 
    
         | 
| 
       124 
     | 
    
         
            -
            const  
     | 
| 
      
 124 
     | 
    
         
            +
            const rb_iseq_t *rb_iseqw_to_iseq(VALUE iseqw);
         
     | 
| 
       125 
125 
     | 
    
         | 
| 
       126 
126 
     | 
    
         
             
            #ifdef HAVE_RB_ISEQ_TYPE
         
     | 
| 
       127 
     | 
    
         
            -
            VALUE rb_iseq_type(const  
     | 
| 
      
 127 
     | 
    
         
            +
            VALUE rb_iseq_type(const rb_iseq_t *);
         
     | 
| 
       128 
128 
     | 
    
         | 
| 
       129 
129 
     | 
    
         
             
            static VALUE
         
     | 
| 
       130 
130 
     | 
    
         
             
            iseq_type(VALUE iseqw)
         
     | 
| 
       131 
131 
     | 
    
         
             
            {
         
     | 
| 
       132 
     | 
    
         
            -
                const  
     | 
| 
      
 132 
     | 
    
         
            +
                const rb_iseq_t *iseq = rb_iseqw_to_iseq(iseqw);
         
     | 
| 
       133 
133 
     | 
    
         
             
                return rb_iseq_type(iseq);
         
     | 
| 
       134 
134 
     | 
    
         
             
            }
         
     | 
| 
       135 
135 
     | 
    
         
             
            #endif
         
     | 
| 
       136 
136 
     | 
    
         | 
| 
       137 
137 
     | 
    
         
             
            #ifdef HAVE_RB_ISEQ_PARAMETERS
         
     | 
| 
       138 
     | 
    
         
            -
            VALUE rb_iseq_parameters(const  
     | 
| 
      
 138 
     | 
    
         
            +
            VALUE rb_iseq_parameters(const rb_iseq_t *, int is_proc);
         
     | 
| 
       139 
139 
     | 
    
         | 
| 
       140 
140 
     | 
    
         
             
            static VALUE
         
     | 
| 
       141 
141 
     | 
    
         
             
            iseq_parameters_symbols(VALUE iseqw)
         
     | 
| 
       142 
142 
     | 
    
         
             
            {
         
     | 
| 
       143 
     | 
    
         
            -
                const  
     | 
| 
      
 143 
     | 
    
         
            +
                const rb_iseq_t *iseq = rb_iseqw_to_iseq(iseqw);
         
     | 
| 
       144 
144 
     | 
    
         
             
                VALUE params = rb_iseq_parameters(iseq, 0);
         
     | 
| 
       145 
145 
     | 
    
         
             
                VALUE ary = rb_ary_new();
         
     | 
| 
       146 
146 
     | 
    
         | 
| 
         @@ -167,12 +167,12 @@ iseq_parameters_symbols(VALUE iseqw) 
     | 
|
| 
       167 
167 
     | 
    
         
             
            #endif
         
     | 
| 
       168 
168 
     | 
    
         | 
| 
       169 
169 
     | 
    
         
             
            #ifdef HAVE_RB_ISEQ_CODE_LOCATION
         
     | 
| 
       170 
     | 
    
         
            -
            void rb_iseq_code_location(const  
     | 
| 
      
 170 
     | 
    
         
            +
            void rb_iseq_code_location(const rb_iseq_t *, int *first_lineno, int *first_column, int *last_lineno, int *last_column);
         
     | 
| 
       171 
171 
     | 
    
         | 
| 
       172 
172 
     | 
    
         
             
            static VALUE
         
     | 
| 
       173 
173 
     | 
    
         
             
            iseq_first_line(VALUE iseqw)
         
     | 
| 
       174 
174 
     | 
    
         
             
            {
         
     | 
| 
       175 
     | 
    
         
            -
                const  
     | 
| 
      
 175 
     | 
    
         
            +
                const rb_iseq_t *iseq = rb_iseqw_to_iseq(iseqw);
         
     | 
| 
       176 
176 
     | 
    
         
             
                int line;
         
     | 
| 
       177 
177 
     | 
    
         
             
                rb_iseq_code_location(iseq, &line, NULL, NULL, NULL);
         
     | 
| 
       178 
178 
     | 
    
         
             
                return INT2NUM(line);
         
     | 
| 
         @@ -181,7 +181,7 @@ iseq_first_line(VALUE iseqw) 
     | 
|
| 
       181 
181 
     | 
    
         
             
            static VALUE
         
     | 
| 
       182 
182 
     | 
    
         
             
            iseq_last_line(VALUE iseqw)
         
     | 
| 
       183 
183 
     | 
    
         
             
            {
         
     | 
| 
       184 
     | 
    
         
            -
                const  
     | 
| 
      
 184 
     | 
    
         
            +
                const rb_iseq_t *iseq = rb_iseqw_to_iseq(iseqw);
         
     | 
| 
       185 
185 
     | 
    
         
             
                int line;
         
     | 
| 
       186 
186 
     | 
    
         
             
                rb_iseq_code_location(iseq, NULL, NULL, &line, NULL);
         
     | 
| 
       187 
187 
     | 
    
         
             
                return INT2NUM(line);
         
     | 
    
        data/lib/debug/config.rb
    CHANGED
    
    | 
         @@ -44,6 +44,7 @@ module DEBUGGER__ 
     | 
|
| 
       44 
44 
     | 
    
         
             
                # remote setting
         
     | 
| 
       45 
45 
     | 
    
         
             
                open:           ['RUBY_DEBUG_OPEN',         "REMOTE: Open remote port (same as `rdbg --open` option)"],
         
     | 
| 
       46 
46 
     | 
    
         
             
                port:           ['RUBY_DEBUG_PORT',         "REMOTE: TCP/IP remote debugging: port"],
         
     | 
| 
      
 47 
     | 
    
         
            +
                port_range:     ['RUBY_DEBUG_PORT_RANGE',   "REMOTE: TCP/IP remote debugging: length of port range"],
         
     | 
| 
       47 
48 
     | 
    
         
             
                host:           ['RUBY_DEBUG_HOST',         "REMOTE: TCP/IP remote debugging: host", :string, "127.0.0.1"],
         
     | 
| 
       48 
49 
     | 
    
         
             
                sock_path:      ['RUBY_DEBUG_SOCK_PATH',    "REMOTE: UNIX Domain Socket remote debugging: socket path"],
         
     | 
| 
       49 
50 
     | 
    
         
             
                sock_dir:       ['RUBY_DEBUG_SOCK_DIR',     "REMOTE: UNIX Domain Socket remote debugging: socket directory"],
         
     | 
| 
         @@ -158,6 +159,22 @@ module DEBUGGER__ 
     | 
|
| 
       158 
159 
     | 
    
         
             
                      SESSION.set_no_sigint_hook old, new
         
     | 
| 
       159 
160 
     | 
    
         
             
                    end
         
     | 
| 
       160 
161 
     | 
    
         
             
                  end
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
                  if_updated old_conf, conf, :irb_console do |old, new|
         
     | 
| 
      
 164 
     | 
    
         
            +
                    if defined?(SESSION) && SESSION.active?
         
     | 
| 
      
 165 
     | 
    
         
            +
                      # irb_console is switched from true to false
         
     | 
| 
      
 166 
     | 
    
         
            +
                      if old
         
     | 
| 
      
 167 
     | 
    
         
            +
                        SESSION.deactivate_irb_integration
         
     | 
| 
      
 168 
     | 
    
         
            +
                      # irb_console is switched from false to true
         
     | 
| 
      
 169 
     | 
    
         
            +
                      else
         
     | 
| 
      
 170 
     | 
    
         
            +
                        if CONFIG[:open]
         
     | 
| 
      
 171 
     | 
    
         
            +
                          SESSION.instance_variable_get(:@ui).puts "\nIRB is not supported on the remote console."
         
     | 
| 
      
 172 
     | 
    
         
            +
                        else
         
     | 
| 
      
 173 
     | 
    
         
            +
                          SESSION.activate_irb_integration
         
     | 
| 
      
 174 
     | 
    
         
            +
                        end
         
     | 
| 
      
 175 
     | 
    
         
            +
                      end
         
     | 
| 
      
 176 
     | 
    
         
            +
                    end
         
     | 
| 
      
 177 
     | 
    
         
            +
                  end
         
     | 
| 
       161 
178 
     | 
    
         
             
                end
         
     | 
| 
       162 
179 
     | 
    
         | 
| 
       163 
180 
     | 
    
         
             
                private def if_updated old_conf, new_conf, key
         
     | 
| 
         @@ -336,6 +353,9 @@ module DEBUGGER__ 
     | 
|
| 
       336 
353 
     | 
    
         
             
                    o.on('--port=PORT', 'Listening TCP/IP port') do |port|
         
     | 
| 
       337 
354 
     | 
    
         
             
                      config[:port] = port
         
     | 
| 
       338 
355 
     | 
    
         
             
                    end
         
     | 
| 
      
 356 
     | 
    
         
            +
                    o.on('--port-range=PORT_RANGE', 'Number of ports to try to connect to') do |port_range|
         
     | 
| 
      
 357 
     | 
    
         
            +
                      config[:port_range] = port_range
         
     | 
| 
      
 358 
     | 
    
         
            +
                    end
         
     | 
| 
       339 
359 
     | 
    
         
             
                    o.on('--host=HOST', 'Listening TCP/IP host') do |host|
         
     | 
| 
       340 
360 
     | 
    
         
             
                      config[:host] = host
         
     | 
| 
       341 
361 
     | 
    
         
             
                    end
         
     | 
    
        data/lib/debug/console.rb
    CHANGED
    
    
| 
         @@ -24,4 +24,14 @@ module DEBUGGER__ 
     | 
|
| 
       24 
24 
     | 
    
         
             
                  IRB::Context.prepend(IrbPatch)
         
     | 
| 
       25 
25 
     | 
    
         
             
                end
         
     | 
| 
       26 
26 
     | 
    
         
             
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              class Session
         
     | 
| 
      
 29 
     | 
    
         
            +
                def deactivate_irb_integration
         
     | 
| 
      
 30 
     | 
    
         
            +
                  Reline.completion_proc = nil
         
     | 
| 
      
 31 
     | 
    
         
            +
                  Reline.output_modifier_proc = nil
         
     | 
| 
      
 32 
     | 
    
         
            +
                  Reline.autocompletion = false
         
     | 
| 
      
 33 
     | 
    
         
            +
                  Reline.dig_perfect_match_proc = nil
         
     | 
| 
      
 34 
     | 
    
         
            +
                  reset_ui UI_LocalConsole.new
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
       27 
37 
     | 
    
         
             
            end
         
     | 
    
        data/lib/debug/prelude.rb
    CHANGED
    
    | 
         @@ -5,7 +5,7 @@ return if defined?(::DEBUGGER__::Session) 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            # Put the following line in your login script (e.g. ~/.bash_profile) with modified path:
         
     | 
| 
       7 
7 
     | 
    
         
             
            #
         
     | 
| 
       8 
     | 
    
         
            -
            #   export RUBYOPT="-r /path/to/debug/prelude $ 
     | 
| 
      
 8 
     | 
    
         
            +
            #   export RUBYOPT="-r /path/to/debug/prelude ${RUBYOPT}"
         
     | 
| 
       9 
9 
     | 
    
         
             
            #
         
     | 
| 
       10 
10 
     | 
    
         
             
            module Kernel
         
     | 
| 
       11 
11 
     | 
    
         
             
              def debugger(*a, up_level: 0, **kw)
         
     | 
    
        data/lib/debug/server.rb
    CHANGED
    
    | 
         @@ -399,6 +399,13 @@ module DEBUGGER__ 
     | 
|
| 
       399 
399 
     | 
    
         
             
                      raise "Specify digits for port number"
         
     | 
| 
       400 
400 
     | 
    
         
             
                    end
         
     | 
| 
       401 
401 
     | 
    
         
             
                  end
         
     | 
| 
      
 402 
     | 
    
         
            +
                  @port_range = if @port.zero?
         
     | 
| 
      
 403 
     | 
    
         
            +
                    0
         
     | 
| 
      
 404 
     | 
    
         
            +
                  else
         
     | 
| 
      
 405 
     | 
    
         
            +
                    port_range_str = (CONFIG[:port_range] || "0").to_s
         
     | 
| 
      
 406 
     | 
    
         
            +
                    raise "Specify a positive integer <=16 for port range" unless port_range_str.match?(/\A\d+\z/) && port_range_str.to_i <= 16
         
     | 
| 
      
 407 
     | 
    
         
            +
                    port_range_str.to_i
         
     | 
| 
      
 408 
     | 
    
         
            +
                  end
         
     | 
| 
       402 
409 
     | 
    
         
             
                  @uuid = nil # for CDP
         
     | 
| 
       403 
410 
     | 
    
         | 
| 
       404 
411 
     | 
    
         
             
                  super()
         
     | 
| 
         @@ -452,7 +459,9 @@ module DEBUGGER__ 
     | 
|
| 
       452 
459 
     | 
    
         
             
                      end
         
     | 
| 
       453 
460 
     | 
    
         
             
                    end
         
     | 
| 
       454 
461 
     | 
    
         
             
                  rescue Errno::EADDRINUSE
         
     | 
| 
       455 
     | 
    
         
            -
                     
     | 
| 
      
 462 
     | 
    
         
            +
                    number_of_retries = @port_range.zero? ? 10 : @port_range
         
     | 
| 
      
 463 
     | 
    
         
            +
                    if retry_cnt < number_of_retries
         
     | 
| 
      
 464 
     | 
    
         
            +
                      @port += 1 unless @port_range.zero?
         
     | 
| 
       456 
465 
     | 
    
         
             
                      retry_cnt += 1
         
     | 
| 
       457 
466 
     | 
    
         
             
                      sleep 0.1
         
     | 
| 
       458 
467 
     | 
    
         
             
                      retry
         
     | 
    
        data/lib/debug/server_cdp.rb
    CHANGED
    
    | 
         @@ -2,7 +2,6 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require 'json'
         
     | 
| 
       4 
4 
     | 
    
         
             
            require 'digest/sha1'
         
     | 
| 
       5 
     | 
    
         
            -
            require 'base64'
         
     | 
| 
       6 
5 
     | 
    
         
             
            require 'securerandom'
         
     | 
| 
       7 
6 
     | 
    
         
             
            require 'stringio'
         
     | 
| 
       8 
7 
     | 
    
         
             
            require 'open3'
         
     | 
| 
         @@ -131,7 +130,7 @@ module DEBUGGER__ 
     | 
|
| 
       131 
130 
     | 
    
         
             
                      stdout.close
         
     | 
| 
       132 
131 
     | 
    
         
             
                      data = stderr.readpartial 4096
         
     | 
| 
       133 
132 
     | 
    
         
             
                      stderr.close
         
     | 
| 
       134 
     | 
    
         
            -
                      if data.match 
     | 
| 
      
 133 
     | 
    
         
            +
                      if data.match(/DevTools listening on ws:\/\/127.0.0.1:(\d+)(.*)/)
         
     | 
| 
       135 
134 
     | 
    
         
             
                        port = $1
         
     | 
| 
       136 
135 
     | 
    
         
             
                        path = $2
         
     | 
| 
       137 
136 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -158,7 +157,7 @@ module DEBUGGER__ 
     | 
|
| 
       158 
157 
     | 
    
         
             
                        raise NotFoundChromeEndpointError
         
     | 
| 
       159 
158 
     | 
    
         
             
                      end
         
     | 
| 
       160 
159 
     | 
    
         
             
                      stderr.close
         
     | 
| 
       161 
     | 
    
         
            -
                      if data.match 
     | 
| 
      
 160 
     | 
    
         
            +
                      if data.match(/DevTools listening on ws:\/\/127.0.0.1:(\d+)(.*)/)
         
     | 
| 
       162 
161 
     | 
    
         
             
                        port = $1
         
     | 
| 
       163 
162 
     | 
    
         
             
                        path = $2
         
     | 
| 
       164 
163 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -190,7 +189,7 @@ module DEBUGGER__ 
     | 
|
| 
       190 
189 
     | 
    
         
             
                    while i < ITERATIONS
         
     | 
| 
       191 
190 
     | 
    
         
             
                      i += 1
         
     | 
| 
       192 
191 
     | 
    
         
             
                      if File.exist?(tf) && data = File.read(tf)
         
     | 
| 
       193 
     | 
    
         
            -
                        if data.match 
     | 
| 
      
 192 
     | 
    
         
            +
                        if data.match(/DevTools listening on ws:\/\/127.0.0.1:(\d+)(.*)/)
         
     | 
| 
       194 
193 
     | 
    
         
             
                          port = $1
         
     | 
| 
       195 
194 
     | 
    
         
             
                          path = $2
         
     | 
| 
       196 
195 
     | 
    
         
             
                          return [port, path]
         
     | 
| 
         @@ -297,8 +296,8 @@ module DEBUGGER__ 
     | 
|
| 
       297 
296 
     | 
    
         
             
                    res = @sock.readpartial 4092
         
     | 
| 
       298 
297 
     | 
    
         
             
                    show_protocol :<, res
         
     | 
| 
       299 
298 
     | 
    
         | 
| 
       300 
     | 
    
         
            -
                    if res.match 
     | 
| 
       301 
     | 
    
         
            -
                      correct_key =  
     | 
| 
      
 299 
     | 
    
         
            +
                    if res.match(/^Sec-WebSocket-Accept: (.*)\r\n/)
         
     | 
| 
      
 300 
     | 
    
         
            +
                      correct_key = Digest::SHA1.base64digest "#{key}==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
         
     | 
| 
       302 
301 
     | 
    
         
             
                      raise "The Sec-WebSocket-Accept value: #{$1} is not valid" unless $1 == correct_key
         
     | 
| 
       303 
302 
     | 
    
         
             
                    else
         
     | 
| 
       304 
303 
     | 
    
         
             
                      raise "Unknown response: #{res}"
         
     | 
| 
         @@ -378,8 +377,8 @@ module DEBUGGER__ 
     | 
|
| 
       378 
377 
     | 
    
         
             
                    req = @sock.readpartial 4096
         
     | 
| 
       379 
378 
     | 
    
         
             
                    show_protocol '>', req
         
     | 
| 
       380 
379 
     | 
    
         | 
| 
       381 
     | 
    
         
            -
                    if req.match 
     | 
| 
       382 
     | 
    
         
            -
                      accept =  
     | 
| 
      
 380 
     | 
    
         
            +
                    if req.match(/^Sec-WebSocket-Key: (.*)\r\n/)
         
     | 
| 
      
 381 
     | 
    
         
            +
                      accept = Digest::SHA1.base64digest "#{$1}258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
         
     | 
| 
       383 
382 
     | 
    
         
             
                      res = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: #{accept}\r\n\r\n"
         
     | 
| 
       384 
383 
     | 
    
         
             
                      @sock.print res
         
     | 
| 
       385 
384 
     | 
    
         
             
                      show_protocol :<, res
         
     | 
| 
         @@ -658,7 +657,7 @@ module DEBUGGER__ 
     | 
|
| 
       658 
657 
     | 
    
         | 
| 
       659 
658 
     | 
    
         
             
                def activate_bp bps
         
     | 
| 
       660 
659 
     | 
    
         
             
                  bps.each_key{|k|
         
     | 
| 
       661 
     | 
    
         
            -
                    if k.match 
     | 
| 
      
 660 
     | 
    
         
            +
                    if k.match(/^\d+:(\d+):(.*)/)
         
     | 
| 
       662 
661 
     | 
    
         
             
                      line = $1
         
     | 
| 
       663 
662 
     | 
    
         
             
                      path = $2
         
     | 
| 
       664 
663 
     | 
    
         
             
                      SESSION.add_line_breakpoint(path, line.to_i + 1)
         
     | 
| 
         @@ -689,7 +688,7 @@ module DEBUGGER__ 
     | 
|
| 
       689 
688 
     | 
    
         
             
                  yield $stderr
         
     | 
| 
       690 
689 
     | 
    
         
             
                end
         
     | 
| 
       691 
690 
     | 
    
         | 
| 
       692 
     | 
    
         
            -
                def puts result= 
     | 
| 
      
 691 
     | 
    
         
            +
                def puts result = ""
         
     | 
| 
       693 
692 
     | 
    
         
             
                  # STDERR.puts "puts: #{result}"
         
     | 
| 
       694 
693 
     | 
    
         
             
                  # send_event 'output', category: 'stderr', output: "PUTS!!: " + result.to_s
         
     | 
| 
       695 
694 
     | 
    
         
             
                end
         
     | 
    
        data/lib/debug/server_dap.rb
    CHANGED
    
    
    
        data/lib/debug/session.rb
    CHANGED
    
    | 
         @@ -202,11 +202,6 @@ module DEBUGGER__ 
     | 
|
| 
       202 
202 
     | 
    
         
             
                    end
         
     | 
| 
       203 
203 
     | 
    
         
             
                    @tp_thread_end.enable
         
     | 
| 
       204 
204 
     | 
    
         | 
| 
       205 
     | 
    
         
            -
                    if CONFIG[:irb_console] && !CONFIG[:open]
         
     | 
| 
       206 
     | 
    
         
            -
                      require_relative "irb_integration"
         
     | 
| 
       207 
     | 
    
         
            -
                      thc.activate_irb_integration
         
     | 
| 
       208 
     | 
    
         
            -
                    end
         
     | 
| 
       209 
     | 
    
         
            -
             
     | 
| 
       210 
205 
     | 
    
         
             
                    # session start
         
     | 
| 
       211 
206 
     | 
    
         
             
                    q << true
         
     | 
| 
       212 
207 
     | 
    
         
             
                    session_server_main
         
     | 
| 
         @@ -214,6 +209,12 @@ module DEBUGGER__ 
     | 
|
| 
       214 
209 
     | 
    
         
             
                  first_q << :ok
         
     | 
| 
       215 
210 
     | 
    
         | 
| 
       216 
211 
     | 
    
         
             
                  q.pop
         
     | 
| 
      
 212 
     | 
    
         
            +
             
     | 
| 
      
 213 
     | 
    
         
            +
                  # For activating irb:rdbg with startup config like `RUBY_DEBUG_IRB_CONSOLE=1`
         
     | 
| 
      
 214 
     | 
    
         
            +
                  # Because in that case the `Config#if_updated` callback would not be triggered
         
     | 
| 
      
 215 
     | 
    
         
            +
                  if CONFIG[:irb_console] && !CONFIG[:open]
         
     | 
| 
      
 216 
     | 
    
         
            +
                    activate_irb_integration
         
     | 
| 
      
 217 
     | 
    
         
            +
                  end
         
     | 
| 
       217 
218 
     | 
    
         
             
                end
         
     | 
| 
       218 
219 
     | 
    
         | 
| 
       219 
220 
     | 
    
         
             
                def deactivate
         
     | 
| 
         @@ -938,14 +939,15 @@ module DEBUGGER__ 
     | 
|
| 
       938 
939 
     | 
    
         
             
                  end
         
     | 
| 
       939 
940 
     | 
    
         | 
| 
       940 
941 
     | 
    
         
             
                  # * `irb`
         
     | 
| 
       941 
     | 
    
         
            -
                  #   *  
     | 
| 
      
 942 
     | 
    
         
            +
                  #   * Activate and switch to `irb:rdbg` console
         
     | 
| 
       942 
943 
     | 
    
         
             
                  register_command 'irb' do |arg|
         
     | 
| 
       943 
944 
     | 
    
         
             
                    if @ui.remote?
         
     | 
| 
       944 
945 
     | 
    
         
             
                      @ui.puts "\nIRB is not supported on the remote console."
         
     | 
| 
       945 
     | 
    
         
            -
                      :retry
         
     | 
| 
       946 
946 
     | 
    
         
             
                    else
         
     | 
| 
       947 
     | 
    
         
            -
                       
     | 
| 
      
 947 
     | 
    
         
            +
                      config_set :irb_console, true
         
     | 
| 
       948 
948 
     | 
    
         
             
                    end
         
     | 
| 
      
 949 
     | 
    
         
            +
             
     | 
| 
      
 950 
     | 
    
         
            +
                    :retry
         
     | 
| 
       949 
951 
     | 
    
         
             
                  end
         
     | 
| 
       950 
952 
     | 
    
         | 
| 
       951 
953 
     | 
    
         
             
                  ### Trace
         
     | 
| 
         @@ -1876,6 +1878,12 @@ module DEBUGGER__ 
     | 
|
| 
       1876 
1878 
     | 
    
         
             
                  end
         
     | 
| 
       1877 
1879 
     | 
    
         
             
                end
         
     | 
| 
       1878 
1880 
     | 
    
         | 
| 
      
 1881 
     | 
    
         
            +
                def activate_irb_integration
         
     | 
| 
      
 1882 
     | 
    
         
            +
                  require_relative "irb_integration"
         
     | 
| 
      
 1883 
     | 
    
         
            +
                  thc = get_thread_client(@session_server)
         
     | 
| 
      
 1884 
     | 
    
         
            +
                  thc.activate_irb_integration
         
     | 
| 
      
 1885 
     | 
    
         
            +
                end
         
     | 
| 
      
 1886 
     | 
    
         
            +
             
     | 
| 
       1879 
1887 
     | 
    
         
             
                def enter_postmortem_session exc
         
     | 
| 
       1880 
1888 
     | 
    
         
             
                  return unless exc.instance_variable_defined? :@__debugger_postmortem_frames
         
     | 
| 
       1881 
1889 
     | 
    
         | 
    
        data/lib/debug/thread_client.rb
    CHANGED
    
    | 
         @@ -44,7 +44,7 @@ module DEBUGGER__ 
     | 
|
| 
       44 
44 
     | 
    
         
             
              end
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
              module GlobalVariablesHelper
         
     | 
| 
       47 
     | 
    
         
            -
                SKIP_GLOBAL_LIST = %i[$= $KCODE $-K $SAFE].freeze
         
     | 
| 
      
 47 
     | 
    
         
            +
                SKIP_GLOBAL_LIST = %i[$= $KCODE $-K $SAFE $FILENAME].freeze
         
     | 
| 
       48 
48 
     | 
    
         
             
                def safe_global_variables
         
     | 
| 
       49 
49 
     | 
    
         
             
                  global_variables.reject{|name| SKIP_GLOBAL_LIST.include? name }
         
     | 
| 
       50 
50 
     | 
    
         
             
                end
         
     | 
| 
         @@ -989,7 +989,7 @@ module DEBUGGER__ 
     | 
|
| 
       989 
989 
     | 
    
         
             
                              true
         
     | 
| 
       990 
990 
     | 
    
         
             
                            else
         
     | 
| 
       991 
991 
     | 
    
         
             
                              true if depth >= DEBUGGER__.frame_depth - 3 &&
         
     | 
| 
       992 
     | 
    
         
            -
                                      caller_locations(2, 1).first. 
     | 
| 
      
 992 
     | 
    
         
            +
                                      caller_locations(2, 1).first.base_label == target_location_label
         
     | 
| 
       993 
993 
     | 
    
         
             
                                      # TODO: imcomplete condition
         
     | 
| 
       994 
994 
     | 
    
         
             
                            end
         
     | 
| 
       995 
995 
     | 
    
         
             
                          end
         
     | 
| 
         @@ -1005,7 +1005,7 @@ module DEBUGGER__ 
     | 
|
| 
       1005 
1005 
     | 
    
         
             
                              true if pat === tp.callee_id.to_s
         
     | 
| 
       1006 
1006 
     | 
    
         
             
                            else # :return, :b_return
         
     | 
| 
       1007 
1007 
     | 
    
         
             
                              true if depth >= DEBUGGER__.frame_depth - 3 &&
         
     | 
| 
       1008 
     | 
    
         
            -
                                      caller_locations(2, 1).first. 
     | 
| 
      
 1008 
     | 
    
         
            +
                                      caller_locations(2, 1).first.base_label == target_location_label
         
     | 
| 
       1009 
1009 
     | 
    
         
             
                                      # TODO: imcomplete condition
         
     | 
| 
       1010 
1010 
     | 
    
         
             
                            end
         
     | 
| 
       1011 
1011 
     | 
    
         
             
                          end
         
     | 
| 
         @@ -1056,9 +1056,6 @@ module DEBUGGER__ 
     | 
|
| 
       1056 
1056 
     | 
    
         
             
                        end
         
     | 
| 
       1057 
1057 
     | 
    
         
             
                      when :call
         
     | 
| 
       1058 
1058 
     | 
    
         
             
                        result = frame_eval(eval_src)
         
     | 
| 
       1059 
     | 
    
         
            -
                      when :irb
         
     | 
| 
       1060 
     | 
    
         
            -
                        require_relative "irb_integration"
         
     | 
| 
       1061 
     | 
    
         
            -
                        activate_irb_integration
         
     | 
| 
       1062 
1059 
     | 
    
         
             
                      when :display, :try_display
         
     | 
| 
       1063 
1060 
     | 
    
         
             
                        failed_results = []
         
     | 
| 
       1064 
1061 
     | 
    
         
             
                        eval_src.each_with_index{|src, i|
         
     | 
    
        data/lib/debug/version.rb
    CHANGED
    
    
    
        data/misc/README.md.erb
    CHANGED
    
    | 
         @@ -13,10 +13,10 @@ New debug.rb has several advantages: 
     | 
|
| 
       13 
13 
     | 
    
         
             
              * TCP/IP
         
     | 
| 
       14 
14 
     | 
    
         
             
              * Integration with rich debugger frontends
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
                 Frontend  
     | 
| 
       17 
     | 
    
         
            -
                  
     | 
| 
       18 
     | 
    
         
            -
                 Connection 
     | 
| 
       19 
     | 
    
         
            -
                 Requirement | No 
     | 
| 
      
 16 
     | 
    
         
            +
                 | Frontend    | [Console](https://github.com/ruby/debug#invoke-as-a-remote-debuggee) | [VSCode](https://github.com/ruby/debug#vscode-integration)                                  | [Chrome DevTool](#chrome-devtool-integration) |
         
     | 
| 
      
 17 
     | 
    
         
            +
                 | ----------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------- |
         
     | 
| 
      
 18 
     | 
    
         
            +
                 | Connection  | UDS, TCP/IP                                                          | UDS, TCP/IP                                                                                 | TCP/IP                                        |
         
     | 
| 
      
 19 
     | 
    
         
            +
                 | Requirement | No                                                                   | [vscode-rdbg](https://marketplace.visualstudio.com/items?itemName=KoichiSasada.vscode-rdbg) | Chrome                                        |
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
            * Extensible: application can introduce debugging support in several ways:
         
     | 
| 
       22 
22 
     | 
    
         
             
              * By `rdbg` command
         
     | 
| 
         @@ -244,16 +244,16 @@ It will help if you want to know what the program is doing. 
     | 
|
| 
       244 
244 
     | 
    
         | 
| 
       245 
245 
     | 
    
         
             
            If you want to run a command written in Ruby like `rake`, `rails`, `bundle`, `rspec`, and so on, you can use `rdbg -c` option.
         
     | 
| 
       246 
246 
     | 
    
         | 
| 
       247 
     | 
    
         
            -
            * Without `-c` option, `rdbg <name>` means that `<name>` is Ruby script and  
     | 
| 
       248 
     | 
    
         
            -
            * With `-c` option, `rdbg -c <name>` means that `<name>` is a command in `PATH` and simply invokes it with the debugger.
         
     | 
| 
      
 247 
     | 
    
         
            +
            * Without the `-c` option, `rdbg <name>` means that `<name>` is a Ruby script and invokes it like `ruby <name>` with the debugger.
         
     | 
| 
      
 248 
     | 
    
         
            +
            * With the `-c` option, `rdbg -c <name>` means that `<name>` is a command in `PATH` and simply invokes it with the debugger.
         
     | 
| 
       249 
249 
     | 
    
         | 
| 
       250 
250 
     | 
    
         
             
            Examples:
         
     | 
| 
       251 
251 
     | 
    
         
             
            * `rdbg -c -- rails server`
         
     | 
| 
       252 
252 
     | 
    
         
             
            * `rdbg -c -- bundle exec ruby foo.rb`
         
     | 
| 
       253 
253 
     | 
    
         
             
            * `rdbg -c -- bundle exec rake test`
         
     | 
| 
       254 
     | 
    
         
            -
            * `rdbg -c -- ruby target.rb` is same as `rdbg target.rb`
         
     | 
| 
      
 254 
     | 
    
         
            +
            * `rdbg -c -- ruby target.rb` is the same as `rdbg target.rb`
         
     | 
| 
       255 
255 
     | 
    
         | 
| 
       256 
     | 
    
         
            -
            NOTE: `--` is needed to separate the command line options for `rdbg` and invoking command. For example, `rdbg -c rake -T` is recognized like `rdbg -c -T -- rake`. It should be `rdbg -c -- rake -T`.
         
     | 
| 
      
 256 
     | 
    
         
            +
            NOTE: `--` is needed to separate the command line options for `rdbg` and the invoking command. For example, `rdbg -c rake -T` is recognized like `rdbg -c -T -- rake`. It should be `rdbg -c -- rake -T`.
         
     | 
| 
       257 
257 
     | 
    
         | 
| 
       258 
258 
     | 
    
         
             
            NOTE: If you want to use bundler (`bundle` command), you need to write `gem debug` line in your `Gemfile`.
         
     | 
| 
       259 
259 
     | 
    
         | 
| 
         @@ -289,10 +289,10 @@ You can run your application as a remote debuggee, and the remote debugger conso 
     | 
|
| 
       289 
289 
     | 
    
         | 
| 
       290 
290 
     | 
    
         
             
            There are multiple ways to run your program as a debuggee:
         
     | 
| 
       291 
291 
     | 
    
         | 
| 
       292 
     | 
    
         
            -
            Stop at program start | [`rdbg` option](https://github.com/ruby/debug#rdbg---open-or-rdbg--o-for-short) | [require](https://github.com/ruby/debug#require-debugopen-in-a-program) | [debugger API](https://github.com/ruby/debug#start-by-method)
         
     | 
| 
       293 
     | 
    
         
            -
             
     | 
| 
       294 
     | 
    
         
            -
            Yes 
     | 
| 
       295 
     | 
    
         
            -
            No 
     | 
| 
      
 292 
     | 
    
         
            +
            | Stop at program start | [`rdbg` option](https://github.com/ruby/debug#rdbg---open-or-rdbg--o-for-short) | [require](https://github.com/ruby/debug#require-debugopen-in-a-program) | [debugger API](https://github.com/ruby/debug#start-by-method) |
         
     | 
| 
      
 293 
     | 
    
         
            +
            | --------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------- |
         
     | 
| 
      
 294 
     | 
    
         
            +
            | Yes                   | `rdbg --open`                                                                   | `require "debug/open"`                                                  | `DEBUGGER__.open`                                             |
         
     | 
| 
      
 295 
     | 
    
         
            +
            | No                    | `rdbg --open --nonstop`                                                         | `require "debug/open_nonstop"`                                          | `DEBUGGER__.open(nonstop: true)`                              |
         
     | 
| 
       296 
296 
     | 
    
         | 
| 
       297 
297 
     | 
    
         
             
            #### `rdbg --open` (or `rdbg -O` for short)
         
     | 
| 
       298 
298 
     | 
    
         | 
| 
         @@ -330,7 +330,9 @@ When `rdbg --attach` connects to the debuggee, you can use any debug commands (s 
     | 
|
| 
       330 
330 
     | 
    
         | 
| 
       331 
331 
     | 
    
         
             
            NOTE: If you use the `quit` command, only the remote console exits and the debuggee program continues to run (and you can connect it again). If you want to exit the debuggee program, use `kill` command.
         
     | 
| 
       332 
332 
     | 
    
         | 
| 
       333 
     | 
    
         
            -
            If you want to use TCP/IP for the remote debugging, you need to specify the port and host with `--port` like `rdbg --open --port 12345` and it binds to `localhost:12345`.
         
     | 
| 
      
 333 
     | 
    
         
            +
            If you want to use TCP/IP for the remote debugging, you need to specify the port and host with `--port` like `rdbg --open --port 12345` and it binds to `localhost:12345`. You can add an optional `--port_range` option to try multiple ports in a reliable way. For example, `rdbg --open --port 12345 --port_range 10` will try to bind to 12345, 12346, 12347, ... until it finds an available port.
         
     | 
| 
      
 334 
     | 
    
         
            +
             
     | 
| 
      
 335 
     | 
    
         
            +
            ```shell
         
     | 
| 
       334 
336 
     | 
    
         | 
| 
       335 
337 
     | 
    
         
             
            To connect to the debuggee, you need to specify the port.
         
     | 
| 
       336 
338 
     | 
    
         | 
| 
         @@ -509,6 +511,30 @@ The `<...>` notation means the argument. 
     | 
|
| 
       509 
511 
     | 
    
         | 
| 
       510 
512 
     | 
    
         
             
            <%= DEBUGGER__.help %>
         
     | 
| 
       511 
513 
     | 
    
         | 
| 
      
 514 
     | 
    
         
            +
            ### Using IRB as the Debug Console
         
     | 
| 
      
 515 
     | 
    
         
            +
             
     | 
| 
      
 516 
     | 
    
         
            +
            Starting from version `v1.9`, you can now use IRB as the debug console. This integration brings additional features such as:
         
     | 
| 
      
 517 
     | 
    
         
            +
             
     | 
| 
      
 518 
     | 
    
         
            +
            * Autocompletion
         
     | 
| 
      
 519 
     | 
    
         
            +
            * Support for multi-line input
         
     | 
| 
      
 520 
     | 
    
         
            +
            * Access to commands not available in `debug`, like `show_source` or `show_doc`
         
     | 
| 
      
 521 
     | 
    
         
            +
            * [Configurable command aliases](https://docs.ruby-lang.org/en/master/IRB.html#module-IRB-label-Command+Aliases)
         
     | 
| 
      
 522 
     | 
    
         
            +
             
     | 
| 
      
 523 
     | 
    
         
            +
            To switch to the IRB console, simply use the `irb` command in the debug console.
         
     | 
| 
      
 524 
     | 
    
         
            +
             
     | 
| 
      
 525 
     | 
    
         
            +
            Once activated, you'll notice the prompt changes to:
         
     | 
| 
      
 526 
     | 
    
         
            +
             
     | 
| 
      
 527 
     | 
    
         
            +
            ```txt
         
     | 
| 
      
 528 
     | 
    
         
            +
            irb:rdbg(main):001>
         
     | 
| 
      
 529 
     | 
    
         
            +
            ```
         
     | 
| 
      
 530 
     | 
    
         
            +
             
     | 
| 
      
 531 
     | 
    
         
            +
            If you want to make IRB the default console for all sessions, configure the `irb_console` setting by either:
         
     | 
| 
      
 532 
     | 
    
         
            +
             
     | 
| 
      
 533 
     | 
    
         
            +
            * Setting the `RUBY_DEBUG_IRB_CONSOLE=true` environment variable
         
     | 
| 
      
 534 
     | 
    
         
            +
            * Or adding `config set irb_console 1` to your `~/.rdbgrc`
         
     | 
| 
      
 535 
     | 
    
         
            +
             
     | 
| 
      
 536 
     | 
    
         
            +
            To disable the IRB console in the current session, execute `config set irb_console 0` in the console.
         
     | 
| 
      
 537 
     | 
    
         
            +
             
     | 
| 
       512 
538 
     | 
    
         
             
            ## Debugger API
         
     | 
| 
       513 
539 
     | 
    
         | 
| 
       514 
540 
     | 
    
         
             
            ### Start debugging
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: debug
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.10.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            original_platform: ''
         
     | 
| 
       6 
7 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
8 
     | 
    
         
             
            - Koichi Sasada
         
     | 
| 
       8 
     | 
    
         
            -
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2024-12-18 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: irb
         
     | 
| 
         @@ -90,7 +90,7 @@ licenses: 
     | 
|
| 
       90 
90 
     | 
    
         
             
            metadata:
         
     | 
| 
       91 
91 
     | 
    
         
             
              homepage_uri: https://github.com/ruby/debug
         
     | 
| 
       92 
92 
     | 
    
         
             
              source_code_uri: https://github.com/ruby/debug
         
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
      
 93 
     | 
    
         
            +
              changelog_uri: https://github.com/ruby/debug/releases/tag/v1.10.0
         
     | 
| 
       94 
94 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
       95 
95 
     | 
    
         
             
            require_paths:
         
     | 
| 
       96 
96 
     | 
    
         
             
            - lib
         
     | 
| 
         @@ -105,8 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       105 
105 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       106 
106 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       107 
107 
     | 
    
         
             
            requirements: []
         
     | 
| 
       108 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
       109 
     | 
    
         
            -
            signing_key: 
         
     | 
| 
      
 108 
     | 
    
         
            +
            rubygems_version: 3.6.0.dev
         
     | 
| 
       110 
109 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       111 
110 
     | 
    
         
             
            summary: Debugging functionality for Ruby
         
     | 
| 
       112 
111 
     | 
    
         
             
            test_files: []
         
     |