debug 1.6.3 → 1.7.1
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/CONTRIBUTING.md +19 -7
 - data/Gemfile +0 -0
 - data/LICENSE.txt +0 -0
 - data/README.md +37 -14
 - data/Rakefile +0 -0
 - data/TODO.md +8 -8
 - data/debug.gemspec +1 -1
 - data/exe/rdbg +1 -1
 - data/ext/debug/debug.c +15 -1
 - data/ext/debug/extconf.rb +0 -0
 - data/ext/debug/iseq_collector.c +0 -0
 - data/lib/debug/abbrev_command.rb +77 -0
 - data/lib/debug/breakpoint.rb +17 -11
 - data/lib/debug/client.rb +26 -9
 - data/lib/debug/color.rb +0 -0
 - data/lib/debug/config.rb +34 -16
 - data/lib/debug/console.rb +0 -0
 - data/lib/debug/frame_info.rb +0 -0
 - data/lib/debug/local.rb +16 -10
 - data/lib/debug/open.rb +0 -0
 - data/lib/debug/open_nonstop.rb +0 -0
 - data/lib/debug/prelude.rb +1 -1
 - data/lib/debug/server.rb +25 -21
 - data/lib/debug/server_cdp.rb +292 -86
 - data/lib/debug/server_dap.rb +132 -47
 - data/lib/debug/session.rb +384 -204
 - data/lib/debug/source_repository.rb +39 -19
 - data/lib/debug/start.rb +1 -1
 - data/lib/debug/thread_client.rb +196 -63
 - data/lib/debug/tracer.rb +0 -0
 - data/lib/debug/version.rb +1 -1
 - data/lib/debug.rb +7 -3
 - data/misc/README.md.erb +9 -3
 - metadata +5 -4
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: a84e87e9582c98cf24ca8aa9f1f30032c10736bf4dbc1c44da016db564a7a574
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: da093ef6ebfd8fc5e4a10fcc39c59826e45829ec09da0d9dc164b9cd71085286
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d663b6db0dba8921aaaa535f834e768367e07fef03613e6a277a27724fb75ecf830c7557465521998d42cbb41744e6335495958f626285468d6e38ae6ec52515
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: cb24e62c5875c069812ff1b056dda3b912a20069d09123b72dbd0da69e61aed66968bc4dc5f80e9b599df743fb7755a2399f1461f344fc43ed9ea6bbf20f251c
         
     | 
    
        data/CONTRIBUTING.md
    CHANGED
    
    | 
         @@ -166,7 +166,7 @@ module DEBUGGER__ 
     | 
|
| 
       166 
166 
     | 
    
         
             
                    9| end
         
     | 
| 
       167 
167 
     | 
    
         
             
                  RUBY
         
     | 
| 
       168 
168 
     | 
    
         
             
                end
         
     | 
| 
       169 
     | 
    
         
            -
             
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
       170 
170 
     | 
    
         
             
                def test_1629720194
         
     | 
| 
       171 
171 
     | 
    
         
             
                  debug_code(program) do
         
     | 
| 
       172 
172 
     | 
    
         
             
                    type 's'
         
     | 
| 
         @@ -272,7 +272,7 @@ To run the test generator, you can enter `$ bin/gentest target.rb --open=vscode` 
     | 
|
| 
       272 
272 
     | 
    
         
             
            Also, if you enter `$ bin/gentest target.rb --open=chrome` there, Chrome will be executed.
         
     | 
| 
       273 
273 
     | 
    
         
             
            If you need to modify existing tests, it is basically a good idea to regenerate them by the test generator instead of rewriting them directly.
         
     | 
| 
       274 
274 
     | 
    
         
             
            Please refer to [the Microsoft "Debug Adapter Protocol" article](https://microsoft.github.io/debug-adapter-protocol/specification) to learn more about DAP formats.
         
     | 
| 
       275 
     | 
    
         
            -
            Please refer to [ 
     | 
| 
      
 275 
     | 
    
         
            +
            Please refer to [the "Chrome DevTools Protocol" official documentation](https://chromedevtools.github.io/devtools-protocol/) to learn more about CDP formats.
         
     | 
| 
       276 
276 
     | 
    
         | 
| 
       277 
277 
     | 
    
         
             
            2. High-level tests
         
     | 
| 
       278 
278 
     | 
    
         | 
| 
         @@ -320,6 +320,22 @@ Execute debugging `program` with `&scenario`. If you want to test it only for DA 
     | 
|
| 
       320 
320 
     | 
    
         | 
| 
       321 
321 
     | 
    
         
             
            `run_protocol_scenario program, cdp: false ...`
         
     | 
| 
       322 
322 
     | 
    
         | 
| 
      
 323 
     | 
    
         
            +
            - attach_to_dap_server(terminate_debuggee:)
         
     | 
| 
      
 324 
     | 
    
         
            +
             
     | 
| 
      
 325 
     | 
    
         
            +
            Attach to the running DAP server through UNIX Domain Socket.
         
     | 
| 
      
 326 
     | 
    
         
            +
             
     | 
| 
      
 327 
     | 
    
         
            +
            - attach_to_cdp_server
         
     | 
| 
      
 328 
     | 
    
         
            +
             
     | 
| 
      
 329 
     | 
    
         
            +
            Attach to the running CDP server through TCP/IP.
         
     | 
| 
      
 330 
     | 
    
         
            +
             
     | 
| 
      
 331 
     | 
    
         
            +
            - req_dap_disconnect
         
     | 
| 
      
 332 
     | 
    
         
            +
             
     | 
| 
      
 333 
     | 
    
         
            +
            Disconnect from the currently connected DAP server.
         
     | 
| 
      
 334 
     | 
    
         
            +
             
     | 
| 
      
 335 
     | 
    
         
            +
            - req_cdp_disconnect
         
     | 
| 
      
 336 
     | 
    
         
            +
             
     | 
| 
      
 337 
     | 
    
         
            +
            Disconnect from the currently connected CDP server.
         
     | 
| 
      
 338 
     | 
    
         
            +
             
     | 
| 
       323 
339 
     | 
    
         
             
            - req_add_breakpoint(lineno, path: temp_file_path, cond: nil)
         
     | 
| 
       324 
340 
     | 
    
         | 
| 
       325 
341 
     | 
    
         
             
            Sends request to rdbg to add a breakpoint.
         
     | 
| 
         @@ -336,7 +352,7 @@ Sends request to rdbg to set exception breakpoints. e.g. 
     | 
|
| 
       336 
352 
     | 
    
         
             
            req_set_exception_breakpoints([{ name: "RuntimeError", condition: "a == 1" }])
         
     | 
| 
       337 
353 
     | 
    
         
             
            ```
         
     | 
| 
       338 
354 
     | 
    
         | 
| 
       339 
     | 
    
         
            -
            Please note that `setExceptionBreakpoints` resets all exception breakpoints in every request. 
     | 
| 
      
 355 
     | 
    
         
            +
            Please note that `setExceptionBreakpoints` resets all exception breakpoints in every request.
         
     | 
| 
       340 
356 
     | 
    
         | 
| 
       341 
357 
     | 
    
         
             
            So the following code will only set breakpoint for `Exception`.
         
     | 
| 
       342 
358 
     | 
    
         | 
| 
         @@ -377,10 +393,6 @@ Sends request to rdbg to step back from current method. 
     | 
|
| 
       377 
393 
     | 
    
         | 
| 
       378 
394 
     | 
    
         
             
            Sends request to rdbg to terminate the debuggee.
         
     | 
| 
       379 
395 
     | 
    
         | 
| 
       380 
     | 
    
         
            -
            - assert_reattach
         
     | 
| 
       381 
     | 
    
         
            -
             
     | 
| 
       382 
     | 
    
         
            -
            Passes if reattaching to rdbg is successful.
         
     | 
| 
       383 
     | 
    
         
            -
             
     | 
| 
       384 
396 
     | 
    
         
             
            - assert_hover_result(expected, expression)
         
     | 
| 
       385 
397 
     | 
    
         | 
| 
       386 
398 
     | 
    
         
             
            Passes if result of `expression` matches `expected`.
         
     | 
    
        data/Gemfile
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        data/LICENSE.txt
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -469,6 +469,7 @@ config set no_color true 
     | 
|
| 
       469 
469 
     | 
    
         
             
            * UI
         
     | 
| 
       470 
470 
     | 
    
         
             
              * `RUBY_DEBUG_LOG_LEVEL` (`log_level`): Log level same as Logger (default: WARN)
         
     | 
| 
       471 
471 
     | 
    
         
             
              * `RUBY_DEBUG_SHOW_SRC_LINES` (`show_src_lines`): Show n lines source code on breakpoint (default: 10)
         
     | 
| 
      
 472 
     | 
    
         
            +
              * `RUBY_DEBUG_SHOW_EVALEDSRC` (`show_evaledsrc`): Show actually evaluated source (default: false)
         
     | 
| 
       472 
473 
     | 
    
         
             
              * `RUBY_DEBUG_SHOW_FRAMES` (`show_frames`): Show n frames on breakpoint (default: 2)
         
     | 
| 
       473 
474 
     | 
    
         
             
              * `RUBY_DEBUG_USE_SHORT_PATH` (`use_short_path`): Show shorten PATH (like $(Gem)/foo.rb) (default: false)
         
     | 
| 
       474 
475 
     | 
    
         
             
              * `RUBY_DEBUG_NO_COLOR` (`no_color`): Do not use colorize (default: false)
         
     | 
| 
         @@ -488,12 +489,13 @@ config set no_color true 
     | 
|
| 
       488 
489 
     | 
    
         
             
              * `RUBY_DEBUG_NONSTOP` (`nonstop`): Nonstop mode (default: false)
         
     | 
| 
       489 
490 
     | 
    
         
             
              * `RUBY_DEBUG_STOP_AT_LOAD` (`stop_at_load`): Stop at just loading location (default: false)
         
     | 
| 
       490 
491 
     | 
    
         
             
              * `RUBY_DEBUG_INIT_SCRIPT` (`init_script`): debug command script path loaded at first stop
         
     | 
| 
       491 
     | 
    
         
            -
              * `RUBY_DEBUG_COMMANDS` (`commands`): debug commands invoked at first stop.  
     | 
| 
      
 492 
     | 
    
         
            +
              * `RUBY_DEBUG_COMMANDS` (`commands`): debug commands invoked at first stop. Commands should be separated by `;;`
         
     | 
| 
       492 
493 
     | 
    
         
             
              * `RUBY_DEBUG_NO_RC` (`no_rc`): ignore loading ~/.rdbgrc(.rb) (default: false)
         
     | 
| 
       493 
494 
     | 
    
         
             
              * `RUBY_DEBUG_HISTORY_FILE` (`history_file`): history file (default: ~/.rdbg_history)
         
     | 
| 
       494 
495 
     | 
    
         
             
              * `RUBY_DEBUG_SAVE_HISTORY` (`save_history`): maximum save history lines (default: 10000)
         
     | 
| 
       495 
496 
     | 
    
         | 
| 
       496 
497 
     | 
    
         
             
            * REMOTE
         
     | 
| 
      
 498 
     | 
    
         
            +
              * `RUBY_DEBUG_OPEN` (`open`): Open remote port (same as `rdbg --open` option)
         
     | 
| 
       497 
499 
     | 
    
         
             
              * `RUBY_DEBUG_PORT` (`port`): TCP/IP remote debugging: port
         
     | 
| 
       498 
500 
     | 
    
         
             
              * `RUBY_DEBUG_HOST` (`host`): TCP/IP remote debugging: host (default: 127.0.0.1)
         
     | 
| 
       499 
501 
     | 
    
         
             
              * `RUBY_DEBUG_SOCK_PATH` (`sock_path`): UNIX Domain Socket remote debugging: socket path
         
     | 
| 
         @@ -501,7 +503,6 @@ config set no_color true 
     | 
|
| 
       501 
503 
     | 
    
         
             
              * `RUBY_DEBUG_LOCAL_FS_MAP` (`local_fs_map`): Specify local fs map
         
     | 
| 
       502 
504 
     | 
    
         
             
              * `RUBY_DEBUG_SKIP_BP` (`skip_bp`): Skip breakpoints if no clients are attached (default: false)
         
     | 
| 
       503 
505 
     | 
    
         
             
              * `RUBY_DEBUG_COOKIE` (`cookie`): Cookie for negotiation
         
     | 
| 
       504 
     | 
    
         
            -
              * `RUBY_DEBUG_OPEN_FRONTEND` (`open_frontend`): frontend used by open command (vscode, chrome, default: rdbg).
         
     | 
| 
       505 
506 
     | 
    
         
             
              * `RUBY_DEBUG_CHROME_PATH` (`chrome_path`): Platform dependent path of Chrome (For more information, See [here](https://github.com/ruby/debug/pull/334/files#diff-5fc3d0a901379a95bc111b86cf0090b03f857edfd0b99a0c1537e26735698453R55-R64))
         
     | 
| 
       506 
507 
     | 
    
         | 
| 
       507 
508 
     | 
    
         
             
            * OBSOLETE
         
     | 
| 
         @@ -536,7 +537,8 @@ There are additional features: 
     | 
|
| 
       536 
537 
     | 
    
         
             
            * `<expr>` without debug command is almost same as `pp <expr>`.
         
     | 
| 
       537 
538 
     | 
    
         
             
              * If the input line `<expr>` does *NOT* start with any debug command, the line `<expr>` will be evaluated as a Ruby expression and the result will be printed with `pp` method. So that the input `foo.bar` is same as `pp foo.bar`.
         
     | 
| 
       538 
539 
     | 
    
         
             
              * If `<expr>` is recognized as a debug command, of course it is not evaluated as a Ruby expression, but is executed as debug command. For example, you can not evaluate such single letter local variables `i`, `b`, `n`, `c` because they are single letter debug commands. Use `p i` instead.
         
     | 
| 
       539 
     | 
    
         
            -
            *  
     | 
| 
      
 540 
     | 
    
         
            +
              * So the author (Koichi Sasada) recommends to use `p`, `pp` or `eval` command to evaluate the Ruby expression everytime.
         
     | 
| 
      
 541 
     | 
    
         
            +
            * `Enter` without any input repeats the last command (useful when repeating `step`s) for some commands.
         
     | 
| 
       540 
542 
     | 
    
         
             
            * `Ctrl-D` is equal to `quit` command.
         
     | 
| 
       541 
543 
     | 
    
         
             
            * [debug command compare sheet - Google Sheets](https://docs.google.com/spreadsheets/d/1TlmmUDsvwK4sSIyoMv-io52BUUz__R5wpu-ComXlsw0/edit?usp=sharing)
         
     | 
| 
       542 
544 
     | 
    
         | 
| 
         @@ -558,7 +560,14 @@ The `<...>` notation means the argument. 
     | 
|
| 
       558 
560 
     | 
    
         
             
              * Finish this frame. Resume the program until the current frame is finished.
         
     | 
| 
       559 
561 
     | 
    
         
             
            * `fin[ish] <n>`
         
     | 
| 
       560 
562 
     | 
    
         
             
              * Finish `<n>`th frames.
         
     | 
| 
       561 
     | 
    
         
            -
            * ` 
     | 
| 
      
 563 
     | 
    
         
            +
            * `u[ntil]`
         
     | 
| 
      
 564 
     | 
    
         
            +
              * Similar to `next` command, but only stop later lines or the end of the current frame.
         
     | 
| 
      
 565 
     | 
    
         
            +
              * Similar to gdb's `advance` command.
         
     | 
| 
      
 566 
     | 
    
         
            +
            * `u[ntil] <[file:]line>
         
     | 
| 
      
 567 
     | 
    
         
            +
              * Run til the program reaches given location or the end of the current frame.
         
     | 
| 
      
 568 
     | 
    
         
            +
            * `u[ntil] <name>
         
     | 
| 
      
 569 
     | 
    
         
            +
              * Run til the program invokes a method `<name>`. `<name>` can be a regexp with `/name/`.
         
     | 
| 
      
 570 
     | 
    
         
            +
            * `c` or `cont` or `continue`
         
     | 
| 
       562 
571 
     | 
    
         
             
              * Resume the program.
         
     | 
| 
       563 
572 
     | 
    
         
             
            * `q[uit]` or `Ctrl-D`
         
     | 
| 
       564 
573 
     | 
    
         
             
              * Finish debugger (with the debuggee process on non-remote debugging).
         
     | 
| 
         @@ -638,26 +647,35 @@ The `<...>` notation means the argument. 
     | 
|
| 
       638 
647 
     | 
    
         
             
              * Show predecessor lines as opposed to the `list` command.
         
     | 
| 
       639 
648 
     | 
    
         
             
            * `l[ist] <start>` or `l[ist] <start>-<end>`
         
     | 
| 
       640 
649 
     | 
    
         
             
              * Show current frame's source code from the line <start> to <end> if given.
         
     | 
| 
      
 650 
     | 
    
         
            +
            * `whereami`
         
     | 
| 
      
 651 
     | 
    
         
            +
              * Show the current frame with source code.
         
     | 
| 
       641 
652 
     | 
    
         
             
            * `edit`
         
     | 
| 
       642 
653 
     | 
    
         
             
              * Open the current file on the editor (use `EDITOR` environment variable).
         
     | 
| 
       643 
654 
     | 
    
         
             
              * Note that edited file will not be reloaded.
         
     | 
| 
       644 
655 
     | 
    
         
             
            * `edit <file>`
         
     | 
| 
       645 
656 
     | 
    
         
             
              * Open <file> on the editor.
         
     | 
| 
       646 
657 
     | 
    
         
             
            * `i[nfo]`
         
     | 
| 
       647 
     | 
    
         
            -
             
     | 
| 
       648 
     | 
    
         
            -
            * `i[nfo]  
     | 
| 
      
 658 
     | 
    
         
            +
              * Show information about current frame (local/instance variables and defined constants).
         
     | 
| 
      
 659 
     | 
    
         
            +
            * `i[nfo]` <subcommand>
         
     | 
| 
      
 660 
     | 
    
         
            +
              * `info` has the following sub-commands.
         
     | 
| 
      
 661 
     | 
    
         
            +
              * Sub-commands can be specified with few letters which is unambiguous, like `l` for 'locals'.
         
     | 
| 
      
 662 
     | 
    
         
            +
            * `i[nfo] l or locals or local_variables`
         
     | 
| 
       649 
663 
     | 
    
         
             
              * Show information about the current frame (local variables)
         
     | 
| 
       650 
     | 
    
         
            -
              * It includes `self` as `%self` and a return value as  
     | 
| 
       651 
     | 
    
         
            -
            * `i[nfo] i 
     | 
| 
      
 664 
     | 
    
         
            +
              * It includes `self` as `%self` and a return value as `_return`.
         
     | 
| 
      
 665 
     | 
    
         
            +
            * `i[nfo] i or ivars or instance_variables`
         
     | 
| 
       652 
666 
     | 
    
         
             
              * Show information about instance variables about `self`.
         
     | 
| 
       653 
     | 
    
         
            -
            * ` 
     | 
| 
      
 667 
     | 
    
         
            +
              * `info ivars <expr>` shows the instance variables of the result of `<expr>`.
         
     | 
| 
      
 668 
     | 
    
         
            +
            * `i[nfo] c or consts or constants`
         
     | 
| 
       654 
669 
     | 
    
         
             
              * Show information about accessible constants except toplevel constants.
         
     | 
| 
       655 
     | 
    
         
            -
            * ` 
     | 
| 
      
 670 
     | 
    
         
            +
              * `info consts <expr>` shows the constants of a class/module of the result of `<expr>`
         
     | 
| 
      
 671 
     | 
    
         
            +
            * `i[nfo] g or globals or global_variables`
         
     | 
| 
       656 
672 
     | 
    
         
             
              * Show information about global variables
         
     | 
| 
      
 673 
     | 
    
         
            +
            * `i[nfo] th or threads`
         
     | 
| 
      
 674 
     | 
    
         
            +
              * Show all threads (same as `th[read]`).
         
     | 
| 
      
 675 
     | 
    
         
            +
            * `i[nfo] b or breakpoints or w or watchpoints`
         
     | 
| 
      
 676 
     | 
    
         
            +
              * Show all breakpoints and watchpoints.
         
     | 
| 
       657 
677 
     | 
    
         
             
            * `i[nfo] ... /regexp/`
         
     | 
| 
       658 
678 
     | 
    
         
             
              * Filter the output with `/regexp/`.
         
     | 
| 
       659 
     | 
    
         
            -
            * `i[nfo] th[read[s]]`
         
     | 
| 
       660 
     | 
    
         
            -
              * Show all threads (same as `th[read]`).
         
     | 
| 
       661 
679 
     | 
    
         
             
            * `o[utline]` or `ls`
         
     | 
| 
       662 
680 
     | 
    
         
             
              * Show you available methods, constants, local variables, and instance variables in the current scope.
         
     | 
| 
       663 
681 
     | 
    
         
             
            * `o[utline] <expr>` or `ls <expr>`
         
     | 
| 
         @@ -822,11 +840,11 @@ It is useful if you only want to call a debug command and don't want to stop the 
     | 
|
| 
       822 
840 
     | 
    
         
             
            ```
         
     | 
| 
       823 
841 
     | 
    
         
             
            def initialize
         
     | 
| 
       824 
842 
     | 
    
         
             
              @a = 1
         
     | 
| 
       825 
     | 
    
         
            -
              binding.b do: 'watch @a'
         
     | 
| 
      
 843 
     | 
    
         
            +
              binding.b do: 'info \n watch @a'
         
     | 
| 
       826 
844 
     | 
    
         
             
            end
         
     | 
| 
       827 
845 
     | 
    
         
             
            ```
         
     | 
| 
       828 
846 
     | 
    
         | 
| 
       829 
     | 
    
         
            -
            On this case, register a watch breakpoint for `@a` and continue to run.
         
     | 
| 
      
 847 
     | 
    
         
            +
            On this case, execute the `info` command then register a watch breakpoint for `@a` and continue to run. You can also use `;;` instead of `\n` to separate your commands.
         
     | 
| 
       830 
848 
     | 
    
         | 
| 
       831 
849 
     | 
    
         
             
            If `pre: 'command'` is specified, the debugger suspends the program and run the `command` as a debug command, and keep suspend.
         
     | 
| 
       832 
850 
     | 
    
         
             
            It is useful if you have operations before suspend.
         
     | 
| 
         @@ -900,6 +918,11 @@ NOTE 
     | 
|
| 
       900 
918 
     | 
    
         | 
| 
       901 
919 
     | 
    
         
             
            ```
         
     | 
| 
       902 
920 
     | 
    
         | 
| 
      
 921 
     | 
    
         
            +
            # Additional Resources
         
     | 
| 
      
 922 
     | 
    
         
            +
             
     | 
| 
      
 923 
     | 
    
         
            +
            - [From byebug to ruby/debug](https://st0012.dev/from-byebug-to-ruby-debug) by Stan Lo - A migration guide for `byebug` users.
         
     | 
| 
      
 924 
     | 
    
         
            +
            - [ruby/debug cheatsheet](https://st0012.dev/ruby-debug-cheatsheet) by Stan Lo
         
     | 
| 
      
 925 
     | 
    
         
            +
             
     | 
| 
       903 
926 
     | 
    
         
             
            # Contributing
         
     | 
| 
       904 
927 
     | 
    
         | 
| 
       905 
928 
     | 
    
         
             
            Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/debug.
         
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        data/TODO.md
    CHANGED
    
    | 
         @@ -2,22 +2,22 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            ## Basic functionality
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            * Support Ractors
         
     | 
| 
       6 
     | 
    
         
            -
            * Signal (SIGINT) trap handling 
         
     | 
| 
      
 5 
     | 
    
         
            +
            * Support Fibers and Ractors
         
     | 
| 
       7 
6 
     | 
    
         | 
| 
       8 
7 
     | 
    
         
             
            ## UI
         
     | 
| 
       9 
8 
     | 
    
         | 
| 
      
 9 
     | 
    
         
            +
            * Multi-line support
         
     | 
| 
       10 
10 
     | 
    
         
             
            * Completion for Ruby's code
         
     | 
| 
       11 
11 
     | 
    
         
             
            * Interactive breakpoint setting
         
     | 
| 
       12 
12 
     | 
    
         
             
            * Interactive record & play debugging
         
     | 
| 
       13 
13 
     | 
    
         
             
            * irb integration
         
     | 
| 
       14 
     | 
    
         
            -
            * Web browser integrated UI
         
     | 
| 
       15 
     | 
    
         
            -
            * History file
         
     | 
| 
       16 
14 
     | 
    
         | 
| 
       17 
15 
     | 
    
         
             
            ## Debug command
         
     | 
| 
       18 
16 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
            * Breakpoints
         
     | 
| 
       20 
     | 
    
         
            -
                * Lightweight pending method break points with Ruby 3.1 feature (TP:method_added)
         
     | 
| 
       21 
17 
     | 
    
         
             
            * Watch points
         
     | 
| 
       22 
     | 
    
         
            -
                * Lightweight watchpoints for instance variables with Ruby 3. 
     | 
| 
       23 
     | 
    
         
            -
            *  
     | 
| 
      
 18 
     | 
    
         
            +
                * Lightweight watchpoints for instance variables with Ruby 3.3 features (TP:ivar_set)
         
     | 
| 
      
 19 
     | 
    
         
            +
            * Alias
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            ## Debug port
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            * Debug port for monitoring
         
     | 
    
        data/debug.gemspec
    CHANGED
    
    | 
         @@ -27,6 +27,6 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       27 
27 
     | 
    
         
             
              spec.require_paths = ["lib"]
         
     | 
| 
       28 
28 
     | 
    
         
             
              spec.extensions    = ['ext/debug/extconf.rb']
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
              spec.add_dependency "irb", ">= 1. 
     | 
| 
      
 30 
     | 
    
         
            +
              spec.add_dependency "irb", ">= 1.5.0" # for binding.irb(show_code: false)
         
     | 
| 
       31 
31 
     | 
    
         
             
              spec.add_dependency "reline", ">= 0.3.1"
         
     | 
| 
       32 
32 
     | 
    
         
             
            end
         
     | 
    
        data/exe/rdbg
    CHANGED
    
    | 
         @@ -10,7 +10,7 @@ when :start 
     | 
|
| 
       10 
10 
     | 
    
         
             
              require 'rbconfig'
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
              libpath = File.join(File.expand_path(File.dirname(__dir__)), 'lib/debug')
         
     | 
| 
       13 
     | 
    
         
            -
              start_mode = config[: 
     | 
| 
      
 13 
     | 
    
         
            +
              start_mode = config[:open] ? "open" : 'start'
         
     | 
| 
       14 
14 
     | 
    
         
             
              cmd = config[:command] ? ARGV.shift : (ENV['RUBY'] || RbConfig.ruby)
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
              if defined?($:.resolve_feature_path)
         
     | 
    
        data/ext/debug/debug.c
    CHANGED
    
    | 
         @@ -76,7 +76,12 @@ di_body(const rb_debug_inspector_t *dc, void *ptr) 
     | 
|
| 
       76 
76 
     | 
    
         
             
                                 rb_debug_inspector_frame_binding_get(dc, i),
         
     | 
| 
       77 
77 
     | 
    
         
             
                                 iseq,
         
     | 
| 
       78 
78 
     | 
    
         
             
                                 rb_debug_inspector_frame_class_get(dc, i),
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
      
 79 
     | 
    
         
            +
            #ifdef RB_DEBUG_INSPECTOR_FRAME_DEPTH
         
     | 
| 
      
 80 
     | 
    
         
            +
                                 rb_debug_inspector_frame_depth(dc, i)
         
     | 
| 
      
 81 
     | 
    
         
            +
            #else
         
     | 
| 
      
 82 
     | 
    
         
            +
                                 INT2FIX(len - i)
         
     | 
| 
      
 83 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 84 
     | 
    
         
            +
                                 );
         
     | 
| 
       80 
85 
     | 
    
         
             
                    rb_ary_push(ary, e);
         
     | 
| 
       81 
86 
     | 
    
         
             
                }
         
     | 
| 
       82 
87 
     | 
    
         | 
| 
         @@ -89,6 +94,13 @@ capture_frames(VALUE self, VALUE skip_path_prefix) 
     | 
|
| 
       89 
94 
     | 
    
         
             
                return rb_debug_inspector_open(di_body, (void *)skip_path_prefix);
         
     | 
| 
       90 
95 
     | 
    
         
             
            }
         
     | 
| 
       91 
96 
     | 
    
         | 
| 
      
 97 
     | 
    
         
            +
            #ifdef RB_DEBUG_INSPECTOR_FRAME_DEPTH
         
     | 
| 
      
 98 
     | 
    
         
            +
            static VALUE
         
     | 
| 
      
 99 
     | 
    
         
            +
            frame_depth(VALUE self)
         
     | 
| 
      
 100 
     | 
    
         
            +
            {
         
     | 
| 
      
 101 
     | 
    
         
            +
                return rb_debug_inspector_current_depth();
         
     | 
| 
      
 102 
     | 
    
         
            +
            }
         
     | 
| 
      
 103 
     | 
    
         
            +
            #else
         
     | 
| 
       92 
104 
     | 
    
         
             
            static VALUE
         
     | 
| 
       93 
105 
     | 
    
         
             
            frame_depth(VALUE self)
         
     | 
| 
       94 
106 
     | 
    
         
             
            {
         
     | 
| 
         @@ -96,6 +108,8 @@ frame_depth(VALUE self) 
     | 
|
| 
       96 
108 
     | 
    
         
             
                VALUE bt = rb_make_backtrace();
         
     | 
| 
       97 
109 
     | 
    
         
             
                return INT2FIX(RARRAY_LEN(bt));
         
     | 
| 
       98 
110 
     | 
    
         
             
            }
         
     | 
| 
      
 111 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
       99 
113 
     | 
    
         | 
| 
       100 
114 
     | 
    
         
             
            // iseq
         
     | 
| 
       101 
115 
     | 
    
         | 
    
        data/ext/debug/extconf.rb
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        data/ext/debug/iseq_collector.c
    CHANGED
    
    | 
         
            File without changes
         
     | 
| 
         @@ -0,0 +1,77 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            module DEBUGGER__
         
     | 
| 
      
 3 
     | 
    
         
            +
              class AbbrevCommand
         
     | 
| 
      
 4 
     | 
    
         
            +
                class TrieNode
         
     | 
| 
      
 5 
     | 
    
         
            +
                  def initialize
         
     | 
| 
      
 6 
     | 
    
         
            +
                    @children = {}
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @types = {} # set
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  def append c, type
         
     | 
| 
      
 11 
     | 
    
         
            +
                    trie = (@children[c] ||= TrieNode.new)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    trie.add_type type
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def [](c)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    @children[c]
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def add_type type
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @types[type] = true
         
     | 
| 
      
 21 
     | 
    
         
            +
                    self
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  def types
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @types.keys
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def type
         
     | 
| 
      
 29 
     | 
    
         
            +
                    if @types.size == 1
         
     | 
| 
      
 30 
     | 
    
         
            +
                      @types.keys.first
         
     | 
| 
      
 31 
     | 
    
         
            +
                    else
         
     | 
| 
      
 32 
     | 
    
         
            +
                      nil
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  def candidates
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @children.map{|c, n|
         
     | 
| 
      
 38 
     | 
    
         
            +
                      ss = n.candidates
         
     | 
| 
      
 39 
     | 
    
         
            +
                      ss.empty? ? c :
         
     | 
| 
      
 40 
     | 
    
         
            +
                      ss.map{|s|
         
     | 
| 
      
 41 
     | 
    
         
            +
                        c+s
         
     | 
| 
      
 42 
     | 
    
         
            +
                      }
         
     | 
| 
      
 43 
     | 
    
         
            +
                    }.flatten
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                # config: { type: [commands...], ... }
         
     | 
| 
      
 48 
     | 
    
         
            +
                def initialize config
         
     | 
| 
      
 49 
     | 
    
         
            +
                  @trie = TrieNode.new
         
     | 
| 
      
 50 
     | 
    
         
            +
                  build config
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                private def build config
         
     | 
| 
      
 54 
     | 
    
         
            +
                  config.each do |type, commands|
         
     | 
| 
      
 55 
     | 
    
         
            +
                    commands.each do |command|
         
     | 
| 
      
 56 
     | 
    
         
            +
                      trie = @trie
         
     | 
| 
      
 57 
     | 
    
         
            +
                      command.each_char do |c|
         
     | 
| 
      
 58 
     | 
    
         
            +
                        trie = trie.append(c, type)
         
     | 
| 
      
 59 
     | 
    
         
            +
                      end
         
     | 
| 
      
 60 
     | 
    
         
            +
                    end
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                def search str, if_none = nil
         
     | 
| 
      
 65 
     | 
    
         
            +
                  trie = @trie
         
     | 
| 
      
 66 
     | 
    
         
            +
                  str.each_char do |c|
         
     | 
| 
      
 67 
     | 
    
         
            +
                    if trie = trie[c]
         
     | 
| 
      
 68 
     | 
    
         
            +
                      return trie.type if trie.type
         
     | 
| 
      
 69 
     | 
    
         
            +
                    else
         
     | 
| 
      
 70 
     | 
    
         
            +
                      return if_none
         
     | 
| 
      
 71 
     | 
    
         
            +
                    end
         
     | 
| 
      
 72 
     | 
    
         
            +
                  end
         
     | 
| 
      
 73 
     | 
    
         
            +
                  yield trie.candidates.map{|s| str + s} if block_given?
         
     | 
| 
      
 74 
     | 
    
         
            +
                  if_none
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/debug/breakpoint.rb
    CHANGED
    
    | 
         @@ -6,7 +6,7 @@ module DEBUGGER__ 
     | 
|
| 
       6 
6 
     | 
    
         
             
              class Breakpoint
         
     | 
| 
       7 
7 
     | 
    
         
             
                include SkipPathHelper
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
                attr_reader :key
         
     | 
| 
      
 9 
     | 
    
         
            +
                attr_reader :key, :skip_src
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                def initialize cond, command, path, do_enable: true
         
     | 
| 
       12 
12 
     | 
    
         
             
                  @deleted = false
         
     | 
| 
         @@ -101,6 +101,10 @@ module DEBUGGER__ 
     | 
|
| 
       101 
101 
     | 
    
         
             
                def generate_label(name)
         
     | 
| 
       102 
102 
     | 
    
         
             
                  colorize(" BP - #{name} ", [:YELLOW, :BOLD, :REVERSE])
         
     | 
| 
       103 
103 
     | 
    
         
             
                end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                def pending_until_load?
         
     | 
| 
      
 106 
     | 
    
         
            +
                  false
         
     | 
| 
      
 107 
     | 
    
         
            +
                end
         
     | 
| 
       104 
108 
     | 
    
         
             
              end
         
     | 
| 
       105 
109 
     | 
    
         | 
| 
       106 
110 
     | 
    
         
             
              if RUBY_VERSION.to_f <= 2.7
         
     | 
| 
         @@ -141,10 +145,11 @@ module DEBUGGER__ 
     | 
|
| 
       141 
145 
     | 
    
         
             
                  nbp
         
     | 
| 
       142 
146 
     | 
    
         
             
                end
         
     | 
| 
       143 
147 
     | 
    
         | 
| 
       144 
     | 
    
         
            -
                def initialize path, line, cond: nil, oneshot: false, hook_call: true, command: nil, skip_activate: false
         
     | 
| 
      
 148 
     | 
    
         
            +
                def initialize path, line, cond: nil, oneshot: false, hook_call: true, command: nil, skip_activate: false, skip_src: false
         
     | 
| 
       145 
149 
     | 
    
         
             
                  @line = line
         
     | 
| 
       146 
150 
     | 
    
         
             
                  @oneshot = oneshot
         
     | 
| 
       147 
151 
     | 
    
         
             
                  @hook_call = hook_call
         
     | 
| 
      
 152 
     | 
    
         
            +
                  @skip_src = skip_src
         
     | 
| 
       148 
153 
     | 
    
         
             
                  @pending = false
         
     | 
| 
       149 
154 
     | 
    
         | 
| 
       150 
155 
     | 
    
         
             
                  @iseq = nil
         
     | 
| 
         @@ -158,6 +163,10 @@ module DEBUGGER__ 
     | 
|
| 
       158 
163 
     | 
    
         
             
                  @pending = !@iseq
         
     | 
| 
       159 
164 
     | 
    
         
             
                end
         
     | 
| 
       160 
165 
     | 
    
         | 
| 
      
 166 
     | 
    
         
            +
                def pending_until_load?
         
     | 
| 
      
 167 
     | 
    
         
            +
                  @pending
         
     | 
| 
      
 168 
     | 
    
         
            +
                end
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
       161 
170 
     | 
    
         
             
                def setup
         
     | 
| 
       162 
171 
     | 
    
         
             
                  return unless @type
         
     | 
| 
       163 
172 
     | 
    
         | 
| 
         @@ -196,7 +205,7 @@ module DEBUGGER__ 
     | 
|
| 
       196 
205 
     | 
    
         
             
                  enable
         
     | 
| 
       197 
206 
     | 
    
         | 
| 
       198 
207 
     | 
    
         
             
                  if @pending && !@oneshot
         
     | 
| 
       199 
     | 
    
         
            -
                    DEBUGGER__. 
     | 
| 
      
 208 
     | 
    
         
            +
                    DEBUGGER__.info "#{self} is activated."
         
     | 
| 
       200 
209 
     | 
    
         
             
                  end
         
     | 
| 
       201 
210 
     | 
    
         
             
                end
         
     | 
| 
       202 
211 
     | 
    
         | 
| 
         @@ -264,13 +273,10 @@ module DEBUGGER__ 
     | 
|
| 
       264 
273 
     | 
    
         | 
| 
       265 
274 
     | 
    
         
             
                      if !nearest || ((line - nline).abs < (line - nearest.line).abs)
         
     | 
| 
       266 
275 
     | 
    
         
             
                        nearest = NearestISeq.new(iseq, nline, events)
         
     | 
| 
       267 
     | 
    
         
            -
                       
     | 
| 
       268 
     | 
    
         
            -
             
     | 
| 
       269 
     | 
    
         
            -
             
     | 
| 
       270 
     | 
    
         
            -
             
     | 
| 
       271 
     | 
    
         
            -
                            nearest = NearestISeq.new(iseq, nline, events)
         
     | 
| 
       272 
     | 
    
         
            -
                          end
         
     | 
| 
       273 
     | 
    
         
            -
                        end
         
     | 
| 
      
 276 
     | 
    
         
            +
                      elsif @hook_call &&
         
     | 
| 
      
 277 
     | 
    
         
            +
                            nearest.line == iseq.first_line &&
         
     | 
| 
      
 278 
     | 
    
         
            +
                            events.include?(:RUBY_EVENT_CALL)
         
     | 
| 
      
 279 
     | 
    
         
            +
                        nearest = NearestISeq.new(iseq, nline, events)
         
     | 
| 
       274 
280 
     | 
    
         
             
                      end
         
     | 
| 
       275 
281 
     | 
    
         
             
                    end
         
     | 
| 
       276 
282 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -500,7 +506,7 @@ module DEBUGGER__ 
     | 
|
| 
       500 
506 
     | 
    
         
             
                    retried = false
         
     | 
| 
       501 
507 
     | 
    
         | 
| 
       502 
508 
     | 
    
         
             
                    @tp.enable(target: @method)
         
     | 
| 
       503 
     | 
    
         
            -
                    DEBUGGER__. 
     | 
| 
      
 509 
     | 
    
         
            +
                    DEBUGGER__.info "#{self} is activated." if added
         
     | 
| 
       504 
510 
     | 
    
         | 
| 
       505 
511 
     | 
    
         
             
                    if @sig_op == '#'
         
     | 
| 
       506 
512 
     | 
    
         
             
                      @cond_class = @klass if @method.owner != @klass
         
     | 
    
        data/lib/debug/client.rb
    CHANGED
    
    | 
         @@ -25,6 +25,9 @@ module DEBUGGER__ 
     | 
|
| 
       25 
25 
     | 
    
         
             
                    when 'list-socks'
         
     | 
| 
       26 
26 
     | 
    
         
             
                      cleanup_unix_domain_sockets
         
     | 
| 
       27 
27 
     | 
    
         
             
                      puts list_connections
         
     | 
| 
      
 28 
     | 
    
         
            +
                    when 'list-socks-verbose'
         
     | 
| 
      
 29 
     | 
    
         
            +
                      cleanup_unix_domain_sockets
         
     | 
| 
      
 30 
     | 
    
         
            +
                      puts list_connections verbose: true
         
     | 
| 
       28 
31 
     | 
    
         
             
                    when 'setup-autoload'
         
     | 
| 
       29 
32 
     | 
    
         
             
                      setup_autoload
         
     | 
| 
       30 
33 
     | 
    
         
             
                    else
         
     | 
| 
         @@ -91,10 +94,24 @@ module DEBUGGER__ 
     | 
|
| 
       91 
94 
     | 
    
         
             
                    end
         
     | 
| 
       92 
95 
     | 
    
         
             
                  end
         
     | 
| 
       93 
96 
     | 
    
         | 
| 
       94 
     | 
    
         
            -
                  def list_connections
         
     | 
| 
       95 
     | 
    
         
            -
                    Dir.glob(DEBUGGER__.create_unix_domain_socket_name_prefix + '*').find_all do |path|
         
     | 
| 
      
 97 
     | 
    
         
            +
                  def list_connections verbose: false
         
     | 
| 
      
 98 
     | 
    
         
            +
                    socks = Dir.glob(DEBUGGER__.create_unix_domain_socket_name_prefix + '*').find_all do |path|
         
     | 
| 
       96 
99 
     | 
    
         
             
                      File.socket?(path)
         
     | 
| 
       97 
100 
     | 
    
         
             
                    end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                    if verbose
         
     | 
| 
      
 103 
     | 
    
         
            +
                      socks = socks.map{|sock_path|
         
     | 
| 
      
 104 
     | 
    
         
            +
                        Socket.unix(sock_path){|sock|
         
     | 
| 
      
 105 
     | 
    
         
            +
                          sock.puts "info cookie: #{CONFIG[:cookie] || '-'}"
         
     | 
| 
      
 106 
     | 
    
         
            +
                          pid = sock.gets.chomp
         
     | 
| 
      
 107 
     | 
    
         
            +
                          _dbg = sock.gets.chomp
         
     | 
| 
      
 108 
     | 
    
         
            +
                          _unm = sock.gets.chomp
         
     | 
| 
      
 109 
     | 
    
         
            +
                          [sock_path, pid]
         
     | 
| 
      
 110 
     | 
    
         
            +
                        }
         
     | 
| 
      
 111 
     | 
    
         
            +
                      }
         
     | 
| 
      
 112 
     | 
    
         
            +
                    end
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                    socks
         
     | 
| 
       98 
115 
     | 
    
         
             
                  end
         
     | 
| 
       99 
116 
     | 
    
         
             
                end
         
     | 
| 
       100 
117 
     | 
    
         | 
| 
         @@ -148,18 +165,18 @@ module DEBUGGER__ 
     | 
|
| 
       148 
165 
     | 
    
         
             
                    end
         
     | 
| 
       149 
166 
     | 
    
         
             
                  else
         
     | 
| 
       150 
167 
     | 
    
         
             
                    Client.cleanup_unix_domain_sockets
         
     | 
| 
       151 
     | 
    
         
            -
                    files = Client.list_connections
         
     | 
| 
      
 168 
     | 
    
         
            +
                    files = Client.list_connections verbose: true
         
     | 
| 
       152 
169 
     | 
    
         | 
| 
       153 
170 
     | 
    
         
             
                    case files.size
         
     | 
| 
       154 
171 
     | 
    
         
             
                    when 0
         
     | 
| 
       155 
172 
     | 
    
         
             
                      $stderr.puts "No debug session is available."
         
     | 
| 
       156 
173 
     | 
    
         
             
                      exit
         
     | 
| 
       157 
174 
     | 
    
         
             
                    when 1
         
     | 
| 
       158 
     | 
    
         
            -
                      @s = Socket.unix(files.first)
         
     | 
| 
      
 175 
     | 
    
         
            +
                      @s = Socket.unix(files.first.first)
         
     | 
| 
       159 
176 
     | 
    
         
             
                    else
         
     | 
| 
       160 
177 
     | 
    
         
             
                      $stderr.puts "Please select a debug session:"
         
     | 
| 
       161 
     | 
    
         
            -
                      files.each{|f|
         
     | 
| 
       162 
     | 
    
         
            -
                        $stderr.puts "  #{File.basename(f)}"
         
     | 
| 
      
 178 
     | 
    
         
            +
                      files.each{|(f, desc)|
         
     | 
| 
      
 179 
     | 
    
         
            +
                        $stderr.puts "  #{File.basename(f)} (#{desc})"
         
     | 
| 
       163 
180 
     | 
    
         
             
                      }
         
     | 
| 
       164 
181 
     | 
    
         
             
                      exit
         
     | 
| 
       165 
182 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -222,7 +239,7 @@ module DEBUGGER__ 
     | 
|
| 
       222 
239 
     | 
    
         
             
                    when /^ask (\d+) (.*)/
         
     | 
| 
       223 
240 
     | 
    
         
             
                      pid = $1
         
     | 
| 
       224 
241 
     | 
    
         
             
                      print $2
         
     | 
| 
       225 
     | 
    
         
            -
                      send "answer #{pid} #{gets || ''}"
         
     | 
| 
      
 242 
     | 
    
         
            +
                      send "answer #{pid} #{$stdin.gets || ''}"
         
     | 
| 
       226 
243 
     | 
    
         | 
| 
       227 
244 
     | 
    
         
             
                    when /^quit/
         
     | 
| 
       228 
245 
     | 
    
         
             
                      raise 'quit'
         
     | 
| 
         @@ -231,8 +248,8 @@ module DEBUGGER__ 
     | 
|
| 
       231 
248 
     | 
    
         
             
                      puts "(unknown) #{line.inspect}"
         
     | 
| 
       232 
249 
     | 
    
         
             
                    end
         
     | 
| 
       233 
250 
     | 
    
         
             
                  end
         
     | 
| 
       234 
     | 
    
         
            -
                rescue
         
     | 
| 
       235 
     | 
    
         
            -
                  STDERR.puts "disconnected (#{ 
     | 
| 
      
 251 
     | 
    
         
            +
                rescue => e
         
     | 
| 
      
 252 
     | 
    
         
            +
                  STDERR.puts "disconnected (#{e})"
         
     | 
| 
       236 
253 
     | 
    
         
             
                  exit
         
     | 
| 
       237 
254 
     | 
    
         
             
                ensure
         
     | 
| 
       238 
255 
     | 
    
         
             
                  deactivate
         
     | 
    
        data/lib/debug/color.rb
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        data/lib/debug/config.rb
    CHANGED
    
    | 
         @@ -14,6 +14,7 @@ module DEBUGGER__ 
     | 
|
| 
       14 
14 
     | 
    
         
             
                # UI setting
         
     | 
| 
       15 
15 
     | 
    
         
             
                log_level:      ['RUBY_DEBUG_LOG_LEVEL',      "UI: Log level same as Logger",               :loglevel, "WARN"],
         
     | 
| 
       16 
16 
     | 
    
         
             
                show_src_lines: ['RUBY_DEBUG_SHOW_SRC_LINES', "UI: Show n lines source code on breakpoint", :int, "10"],
         
     | 
| 
      
 17 
     | 
    
         
            +
                show_evaledsrc: ['RUBY_DEBUG_SHOW_EVALEDSRC', "UI: Show actually evaluated source",         :bool, "false"],
         
     | 
| 
       17 
18 
     | 
    
         
             
                show_frames:    ['RUBY_DEBUG_SHOW_FRAMES',    "UI: Show n frames on breakpoint",            :int, "2"],
         
     | 
| 
       18 
19 
     | 
    
         
             
                use_short_path: ['RUBY_DEBUG_USE_SHORT_PATH', "UI: Show shorten PATH (like $(Gem)/foo.rb)", :bool, "false"],
         
     | 
| 
       19 
20 
     | 
    
         
             
                no_color:       ['RUBY_DEBUG_NO_COLOR',       "UI: Do not use colorize",                    :bool, "false"],
         
     | 
| 
         @@ -33,12 +34,13 @@ module DEBUGGER__ 
     | 
|
| 
       33 
34 
     | 
    
         
             
                nonstop:        ['RUBY_DEBUG_NONSTOP',     "BOOT: Nonstop mode",                                                :bool, "false"],
         
     | 
| 
       34 
35 
     | 
    
         
             
                stop_at_load:   ['RUBY_DEBUG_STOP_AT_LOAD',"BOOT: Stop at just loading location",                               :bool, "false"],
         
     | 
| 
       35 
36 
     | 
    
         
             
                init_script:    ['RUBY_DEBUG_INIT_SCRIPT', "BOOT: debug command script path loaded at first stop"],
         
     | 
| 
       36 
     | 
    
         
            -
                commands:       ['RUBY_DEBUG_COMMANDS',    "BOOT: debug commands invoked at first stop.  
     | 
| 
      
 37 
     | 
    
         
            +
                commands:       ['RUBY_DEBUG_COMMANDS',    "BOOT: debug commands invoked at first stop. Commands should be separated by `;;`"],
         
     | 
| 
       37 
38 
     | 
    
         
             
                no_rc:          ['RUBY_DEBUG_NO_RC',       "BOOT: ignore loading ~/.rdbgrc(.rb)",                               :bool, "false"],
         
     | 
| 
       38 
39 
     | 
    
         
             
                history_file:   ['RUBY_DEBUG_HISTORY_FILE',"BOOT: history file",               :string, "~/.rdbg_history"],
         
     | 
| 
       39 
40 
     | 
    
         
             
                save_history:   ['RUBY_DEBUG_SAVE_HISTORY',"BOOT: maximum save history lines", :int, "10000"],
         
     | 
| 
       40 
41 
     | 
    
         | 
| 
       41 
42 
     | 
    
         
             
                # remote setting
         
     | 
| 
      
 43 
     | 
    
         
            +
                open:           ['RUBY_DEBUG_OPEN',         "REMOTE: Open remote port (same as `rdbg --open` option)"],
         
     | 
| 
       42 
44 
     | 
    
         
             
                port:           ['RUBY_DEBUG_PORT',         "REMOTE: TCP/IP remote debugging: port"],
         
     | 
| 
       43 
45 
     | 
    
         
             
                host:           ['RUBY_DEBUG_HOST',         "REMOTE: TCP/IP remote debugging: host", :string, "127.0.0.1"],
         
     | 
| 
       44 
46 
     | 
    
         
             
                sock_path:      ['RUBY_DEBUG_SOCK_PATH',    "REMOTE: UNIX Domain Socket remote debugging: socket path"],
         
     | 
| 
         @@ -46,7 +48,6 @@ module DEBUGGER__ 
     | 
|
| 
       46 
48 
     | 
    
         
             
                local_fs_map:   ['RUBY_DEBUG_LOCAL_FS_MAP', "REMOTE: Specify local fs map", :path_map],
         
     | 
| 
       47 
49 
     | 
    
         
             
                skip_bp:        ['RUBY_DEBUG_SKIP_BP',      "REMOTE: Skip breakpoints if no clients are attached", :bool, 'false'],
         
     | 
| 
       48 
50 
     | 
    
         
             
                cookie:         ['RUBY_DEBUG_COOKIE',       "REMOTE: Cookie for negotiation"],
         
     | 
| 
       49 
     | 
    
         
            -
                open_frontend:  ['RUBY_DEBUG_OPEN_FRONTEND',"REMOTE: frontend used by open command (vscode, chrome, default: rdbg)."],
         
     | 
| 
       50 
51 
     | 
    
         
             
                chrome_path:    ['RUBY_DEBUG_CHROME_PATH',  "REMOTE: Platform dependent path of Chrome (For more information, See [here](https://github.com/ruby/debug/pull/334/files#diff-5fc3d0a901379a95bc111b86cf0090b03f857edfd0b99a0c1537e26735698453R55-R64))"],
         
     | 
| 
       51 
52 
     | 
    
         | 
| 
       52 
53 
     | 
    
         
             
                # obsolete
         
     | 
| 
         @@ -63,8 +64,6 @@ module DEBUGGER__ 
     | 
|
| 
       63 
64 
     | 
    
         
             
                end
         
     | 
| 
       64 
65 
     | 
    
         | 
| 
       65 
66 
     | 
    
         
             
                def initialize argv
         
     | 
| 
       66 
     | 
    
         
            -
                  @skip_all = false
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
67 
     | 
    
         
             
                  if self.class.config
         
     | 
| 
       69 
68 
     | 
    
         
             
                    raise 'Can not make multiple configurations in one process'
         
     | 
| 
       70 
69 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -94,14 +93,6 @@ module DEBUGGER__ 
     | 
|
| 
       94 
93 
     | 
    
         
             
                  set_config(key => val)
         
     | 
| 
       95 
94 
     | 
    
         
             
                end
         
     | 
| 
       96 
95 
     | 
    
         | 
| 
       97 
     | 
    
         
            -
                def skip_all
         
     | 
| 
       98 
     | 
    
         
            -
                  @skip_all = true
         
     | 
| 
       99 
     | 
    
         
            -
                end
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
                def skip?
         
     | 
| 
       102 
     | 
    
         
            -
                  @skip_all
         
     | 
| 
       103 
     | 
    
         
            -
                end
         
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
96 
     | 
    
         
             
                def set_config(**kw)
         
     | 
| 
       106 
97 
     | 
    
         
             
                  conf = config.dup
         
     | 
| 
       107 
98 
     | 
    
         
             
                  kw.each{|k, v|
         
     | 
| 
         @@ -158,6 +149,12 @@ module DEBUGGER__ 
     | 
|
| 
       158 
149 
     | 
    
         
             
                  if_updated old_conf, conf, :sigdump_sig do |old_sig, new_sig|
         
     | 
| 
       159 
150 
     | 
    
         
             
                    setup_sigdump old_sig, new_sig
         
     | 
| 
       160 
151 
     | 
    
         
             
                  end
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                  if_updated old_conf, conf, :no_sigint_hook do |old, new|
         
     | 
| 
      
 154 
     | 
    
         
            +
                    if defined?(SESSION)
         
     | 
| 
      
 155 
     | 
    
         
            +
                      SESSION.set_no_sigint_hook old, new
         
     | 
| 
      
 156 
     | 
    
         
            +
                    end
         
     | 
| 
      
 157 
     | 
    
         
            +
                  end
         
     | 
| 
       161 
158 
     | 
    
         
             
                end
         
     | 
| 
       162 
159 
     | 
    
         | 
| 
       163 
160 
     | 
    
         
             
                private def if_updated old_conf, new_conf, key
         
     | 
| 
         @@ -308,8 +305,25 @@ module DEBUGGER__ 
     | 
|
| 
       308 
305 
     | 
    
         
             
                                                    'If TCP/IP options are not given, a UNIX domain socket will be used.',
         
     | 
| 
       309 
306 
     | 
    
         
             
                                                    'If FRONTEND is given, prepare for the FRONTEND.',
         
     | 
| 
       310 
307 
     | 
    
         
             
                                                    'Now rdbg, vscode and chrome is supported.') do |f|
         
     | 
| 
       311 
     | 
    
         
            -
             
     | 
| 
       312 
     | 
    
         
            -
                       
     | 
| 
      
 308 
     | 
    
         
            +
             
     | 
| 
      
 309 
     | 
    
         
            +
                      case f # some format patterns are not documented yet
         
     | 
| 
      
 310 
     | 
    
         
            +
                      when nil
         
     | 
| 
      
 311 
     | 
    
         
            +
                        config[:open] = true
         
     | 
| 
      
 312 
     | 
    
         
            +
                      when /\A\d\z/
         
     | 
| 
      
 313 
     | 
    
         
            +
                        config[:open] = true
         
     | 
| 
      
 314 
     | 
    
         
            +
                        config[:port] = f.to_i
         
     | 
| 
      
 315 
     | 
    
         
            +
                      when /\A(\S+):(\d+)\z/
         
     | 
| 
      
 316 
     | 
    
         
            +
                        config[:open] = true
         
     | 
| 
      
 317 
     | 
    
         
            +
                        config[:host] = $1
         
     | 
| 
      
 318 
     | 
    
         
            +
                        config[:port] = $2.to_i
         
     | 
| 
      
 319 
     | 
    
         
            +
                      when 'tcp'
         
     | 
| 
      
 320 
     | 
    
         
            +
                        config[:open] = true
         
     | 
| 
      
 321 
     | 
    
         
            +
                        config[:port] ||= 0
         
     | 
| 
      
 322 
     | 
    
         
            +
                      when 'vscode', 'chrome', 'cdp'
         
     | 
| 
      
 323 
     | 
    
         
            +
                        config[:open] = f&.downcase
         
     | 
| 
      
 324 
     | 
    
         
            +
                      else
         
     | 
| 
      
 325 
     | 
    
         
            +
                        raise "Unknown option for --open: #{f}"
         
     | 
| 
      
 326 
     | 
    
         
            +
                      end
         
     | 
| 
       313 
327 
     | 
    
         
             
                    end
         
     | 
| 
       314 
328 
     | 
    
         
             
                    o.on('--sock-path=SOCK_PATH', 'UNIX Domain socket path') do |path|
         
     | 
| 
       315 
329 
     | 
    
         
             
                      config[:sock_path] = path
         
     | 
| 
         @@ -479,10 +493,14 @@ module DEBUGGER__ 
     | 
|
| 
       479 
493 
     | 
    
         
             
                  when /\A\s*### (.+)/
         
     | 
| 
       480 
494 
     | 
    
         
             
                    cat = $1
         
     | 
| 
       481 
495 
     | 
    
         
             
                    break if $1 == 'END'
         
     | 
| 
       482 
     | 
    
         
            -
                  when /\A       
     | 
| 
      
 496 
     | 
    
         
            +
                  when /\A      register_command (.+)/
         
     | 
| 
       483 
497 
     | 
    
         
             
                    next unless cat
         
     | 
| 
       484 
498 
     | 
    
         
             
                    next unless desc
         
     | 
| 
       485 
     | 
    
         
            -
             
     | 
| 
      
 499 
     | 
    
         
            +
             
     | 
| 
      
 500 
     | 
    
         
            +
                    ws = []
         
     | 
| 
      
 501 
     | 
    
         
            +
                    $1.gsub(/'([a-z]+)'/){|w|
         
     | 
| 
      
 502 
     | 
    
         
            +
                      ws << $1
         
     | 
| 
      
 503 
     | 
    
         
            +
                    }
         
     | 
| 
       486 
504 
     | 
    
         
             
                    helps[cat] << [ws, desc]
         
     | 
| 
       487 
505 
     | 
    
         
             
                    desc = nil
         
     | 
| 
       488 
506 
     | 
    
         
             
                    max_w = ws.max_by{|w| w.length}
         
     | 
    
        data/lib/debug/console.rb
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        data/lib/debug/frame_info.rb
    CHANGED
    
    | 
         
            File without changes
         
     |