byebug 4.0.5 → 5.0.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/CHANGELOG.md +72 -34
- data/CONTRIBUTING.md +26 -31
- data/README.md +3 -3
- data/lib/byebug/breakpoint.rb +2 -1
- data/lib/byebug/command.rb +27 -49
- data/lib/byebug/commands/break.rb +21 -15
- data/lib/byebug/commands/catch.rb +9 -15
- data/lib/byebug/commands/condition.rb +12 -15
- data/lib/byebug/commands/continue.rb +8 -11
- data/lib/byebug/commands/delete.rb +9 -12
- data/lib/byebug/commands/disable.rb +32 -0
- data/lib/byebug/commands/disable/breakpoints.rb +38 -0
- data/lib/byebug/commands/disable/display.rb +39 -0
- data/lib/byebug/commands/display.rb +18 -51
- data/lib/byebug/commands/down.rb +39 -0
- data/lib/byebug/commands/edit.rb +8 -14
- data/lib/byebug/commands/enable.rb +25 -0
- data/lib/byebug/commands/enable/breakpoints.rb +38 -0
- data/lib/byebug/commands/enable/display.rb +39 -0
- data/lib/byebug/commands/eval.rb +10 -192
- data/lib/byebug/commands/finish.rb +11 -12
- data/lib/byebug/commands/frame.rb +17 -182
- data/lib/byebug/commands/help.rb +18 -18
- data/lib/byebug/commands/history.rb +9 -10
- data/lib/byebug/commands/info.rb +17 -190
- data/lib/byebug/commands/info/args.rb +39 -0
- data/lib/byebug/commands/info/breakpoints.rb +59 -0
- data/lib/byebug/commands/info/catch.rb +39 -0
- data/lib/byebug/commands/info/display.rb +42 -0
- data/lib/byebug/commands/info/file.rb +81 -0
- data/lib/byebug/commands/info/line.rb +31 -0
- data/lib/byebug/commands/info/program.rb +51 -0
- data/lib/byebug/commands/interrupt.rb +5 -9
- data/lib/byebug/commands/irb.rb +5 -9
- data/lib/byebug/commands/kill.rb +6 -12
- data/lib/byebug/commands/list.rb +47 -19
- data/lib/byebug/commands/method.rb +8 -14
- data/lib/byebug/commands/next.rb +36 -0
- data/lib/byebug/commands/pp.rb +41 -0
- data/lib/byebug/commands/pry.rb +5 -9
- data/lib/byebug/commands/ps.rb +44 -0
- data/lib/byebug/commands/putl.rb +43 -0
- data/lib/byebug/commands/quit.rb +8 -12
- data/lib/byebug/commands/restart.rb +6 -12
- data/lib/byebug/commands/save.rb +30 -39
- data/lib/byebug/commands/set.rb +19 -21
- data/lib/byebug/commands/show.rb +10 -16
- data/lib/byebug/commands/source.rb +6 -12
- data/lib/byebug/commands/step.rb +36 -0
- data/lib/byebug/commands/thread.rb +13 -130
- data/lib/byebug/commands/thread/current.rb +35 -0
- data/lib/byebug/commands/thread/list.rb +41 -0
- data/lib/byebug/commands/thread/resume.rb +45 -0
- data/lib/byebug/commands/thread/stop.rb +41 -0
- data/lib/byebug/commands/thread/switch.rb +43 -0
- data/lib/byebug/commands/tracevar.rb +8 -14
- data/lib/byebug/commands/undisplay.rb +12 -15
- data/lib/byebug/commands/untracevar.rb +5 -11
- data/lib/byebug/commands/up.rb +39 -0
- data/lib/byebug/commands/var.rb +15 -94
- data/lib/byebug/commands/var/all.rb +37 -0
- data/lib/byebug/commands/var/const.rb +38 -0
- data/lib/byebug/commands/var/global.rb +33 -0
- data/lib/byebug/commands/var/instance.rb +35 -0
- data/lib/byebug/commands/var/local.rb +35 -0
- data/lib/byebug/commands/where.rb +47 -0
- data/lib/byebug/core.rb +10 -0
- data/lib/byebug/helpers/eval.rb +47 -0
- data/lib/byebug/helpers/file.rb +46 -0
- data/lib/byebug/helpers/frame.rb +76 -0
- data/lib/byebug/helpers/parse.rb +74 -0
- data/lib/byebug/helpers/string.rb +24 -0
- data/lib/byebug/helpers/thread.rb +53 -0
- data/lib/byebug/helpers/toggle.rb +56 -0
- data/lib/byebug/helpers/var.rb +45 -0
- data/lib/byebug/history.rb +2 -4
- data/lib/byebug/interface.rb +5 -3
- data/lib/byebug/interfaces/local_interface.rb +3 -1
- data/lib/byebug/interfaces/remote_interface.rb +3 -1
- data/lib/byebug/interfaces/test_interface.rb +6 -2
- data/lib/byebug/printers/plain.rb +1 -1
- data/lib/byebug/processors/command_processor.rb +9 -11
- data/lib/byebug/processors/control_command_processor.rb +1 -1
- data/lib/byebug/remote.rb +3 -0
- data/lib/byebug/runner.rb +5 -3
- data/lib/byebug/setting.rb +2 -18
- data/lib/byebug/settings/savefile.rb +21 -0
- data/lib/byebug/states/regular_state.rb +15 -6
- data/lib/byebug/subcommand_list.rb +33 -0
- data/lib/byebug/subcommands.rb +53 -0
- data/lib/byebug/version.rb +1 -1
- metadata +45 -6
- data/lib/byebug/commands/enable_disable.rb +0 -132
- data/lib/byebug/commands/stepping.rb +0 -75
- data/lib/byebug/helper.rb +0 -131
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 96c7056e0b0872cdba9ffbc43941b6c804ee5db8
         | 
| 4 | 
            +
              data.tar.gz: c06eaaf13304aca7e289301fa61a7c0735f16647
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1fbf5703563d4b88ec8b5b843704a51b78d4f47f5f9e6735942fc1a75c881f440ff4569220e0c6c4f101bda57e1ec16f3089cf26fa3b068c32b97246ee60fd7e
         | 
| 7 | 
            +
              data.tar.gz: 0ddec536c7c8ae53485105eaf226946d1fcc3510cd1b0a3220f446d18fbbe2433068de2e922ce44192dc5c559ad5fb74d9a76264327f273be3f127b6f32201f0
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,12 +1,34 @@ | |
| 1 | 
            +
            ## 5.0.0
         | 
| 2 | 
            +
            ### Fixed
         | 
| 3 | 
            +
            * [#136](https://github.com/deivid-rodriguez/byebug/issues/136). `frame`
         | 
| 4 | 
            +
            command not working with negative numbers (thanks @ark6).
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            ### Added
         | 
| 7 | 
            +
            * IDE support and a new command/subcommand API for plugins.
         | 
| 8 | 
            +
            * Add a "savefile" setting holding the file where "save" command saves current
         | 
| 9 | 
            +
            debugger's state.
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            ### Changed
         | 
| 12 | 
            +
            * `disable` no longer disable all breakpoints, it just shows command's help
         | 
| 13 | 
            +
            instead. To disable all breakpoints now you need to do `disable breakpoints`
         | 
| 14 | 
            +
            (or `dis b`). Similarly, you can't no longer use `dis 1 2 3` but need to do
         | 
| 15 | 
            +
            `dis b 1 2 3` to disable specific breakpoints. The same applies to the `enable`
         | 
| 16 | 
            +
            command.
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            ### Removed
         | 
| 19 | 
            +
            * `help set <setting>` no longer works. `help set` includes that same output and
         | 
| 20 | 
            +
            it's not verbose enough so that this is a problem. Same with `help show
         | 
| 21 | 
            +
            <setting>`.
         | 
| 22 | 
            +
             | 
| 1 23 | 
             
            ## 4.0.5 - 2015-04-02
         | 
| 2 24 | 
             
            ### Fixed
         | 
| 3 | 
            -
            * #131
         | 
| 25 | 
            +
            * [#131](https://github.com/deivid-rodriguez/byebug/issues/131)
         | 
| 4 26 | 
             
            * Thread commands help format should be consistent with the rest of the help
         | 
| 5 27 | 
             
            system now.
         | 
| 6 28 |  | 
| 7 29 | 
             
            ## 4.0.4 - 2015-03-27
         | 
| 8 30 | 
             
            ### Fixed
         | 
| 9 | 
            -
            * #127
         | 
| 31 | 
            +
            * [#127](https://github.com/deivid-rodriguez/byebug/issues/127)
         | 
| 10 32 |  | 
| 11 33 | 
             
            ## 4.0.3 - 2015-03-19
         | 
| 12 34 | 
             
            ### Fixed
         | 
| @@ -14,13 +36,15 @@ system now. | |
| 14 36 |  | 
| 15 37 | 
             
            ## 4.0.2 - 2015-03-16
         | 
| 16 38 | 
             
            ### Fixed
         | 
| 17 | 
            -
            *  | 
| 18 | 
            -
             | 
| 39 | 
            +
            * [#118](https://github.com/deivid-rodriguez/byebug/issues/118). Remove
         | 
| 40 | 
            +
            `rb-readline` as a dependency and show a help message whenever requiring
         | 
| 41 | 
            +
            `readline` fails instead.
         | 
| 19 42 |  | 
| 20 43 | 
             
            ## 4.0.1 - 2015-03-13
         | 
| 21 44 | 
             
            ### Fixed
         | 
| 22 45 | 
             
            * .yml files needed for printers support were missing from the release... :S
         | 
| 23 | 
            -
            * Add ` | 
| 46 | 
            +
            * [#118](https://github.com/deivid-rodriguez/byebug/issues/118). Add `readline`
         | 
| 47 | 
            +
            as a dependency.
         | 
| 24 48 |  | 
| 25 49 | 
             
            ## 4.0.0 - 2015-03-13
         | 
| 26 50 | 
             
            ### Added
         | 
| @@ -35,9 +59,10 @@ requiring readline fails instead (#118) | |
| 35 59 | 
             
            ### Changed
         | 
| 36 60 | 
             
            - A lot of internal refactoring.
         | 
| 37 61 | 
             
            - `tracevar` now requires the full global variable name (with "$").
         | 
| 38 | 
            -
            - `catch` | 
| 39 | 
            -
            working anyways | 
| 40 | 
            -
            - `step` is now | 
| 62 | 
            +
            - [#92](https://github.com/deivid-rodriguez/byebug/issues/92). The `catch`
         | 
| 63 | 
            +
            command is not allowed in post_mortem mode anymore. It was not working anyways.
         | 
| 64 | 
            +
            - [#85](https://github.com/deivid-rodriguez/byebug/issues/85). `step` is now
         | 
| 65 | 
            +
            more user friendly when used in combination with `up`.
         | 
| 41 66 | 
             
            - `var const` can now be called without an argument and will show constants in
         | 
| 42 67 | 
             
            the current scope.
         | 
| 43 68 | 
             
            - `break` with a class name now creates breakpoints regardless of class not
         | 
| @@ -48,17 +73,21 @@ created anyways. | |
| 48 73 | 
             
            - Code reloading issues.
         | 
| 49 74 | 
             
            - `set fullpath` was not showing fullpaths. Now it is.
         | 
| 50 75 | 
             
            - `up`, `down` and `frame` commands now work in post_mortem mode (#93).
         | 
| 51 | 
            -
            -  | 
| 76 | 
            +
            - rc file (`.byebugrc`) loading: invalid commands are just ignored instead of
         | 
| 52 77 | 
             
            aborting, global (home) rc file is now properly loaded before project's file.
         | 
| 53 | 
            -
            -  | 
| 78 | 
            +
            - [#93](https://github.com/deivid-rodriguez/byebug/issues/93). Backtraces not
         | 
| 79 | 
            +
            working in `post_mortem` mode.
         | 
| 54 80 | 
             
            - 'cmd1 ; cmd2 ; ...; cmdN' syntax which allows running several commands
         | 
| 55 81 | 
             
            sequentially.
         | 
| 56 | 
            -
            -  | 
| 57 | 
            -
             | 
| 82 | 
            +
            - [#101](https://github.com/deivid-rodriguez/byebug/issues/101). `finish`
         | 
| 83 | 
            +
            command not stopping at the correct line.
         | 
| 84 | 
            +
            - [#106](https://github.com/deivid-rodriguez/byebug/issues/106). `break` with
         | 
| 85 | 
            +
            namespaced class, like `break A::B#c` should now work.
         | 
| 58 86 | 
             
            - Command history is now persisted before exiting byebug.
         | 
| 59 87 | 
             
            - Setting breakpoint in a method would stop not only at the beginning of the
         | 
| 60 88 | 
             
            method but also at the beginning of every block inside the method.
         | 
| 61 | 
            -
            -  | 
| 89 | 
            +
            - [#122](https://github.com/deivid-rodriguez/byebug/issues/122). Setting
         | 
| 90 | 
            +
            breakpoints on module methods (@x-yuri).
         | 
| 62 91 |  | 
| 63 92 | 
             
            ### Removed
         | 
| 64 93 | 
             
            - `autoreload` setting as it's not necessary anymore. Code should always be up
         | 
| @@ -82,12 +111,14 @@ autoevaluate it. | |
| 82 111 |  | 
| 83 112 | 
             
            ## 3.5.1 - 2014-09-29
         | 
| 84 113 | 
             
            ### Fixed
         | 
| 85 | 
            -
            -  | 
| 114 | 
            +
            - [#79](https://github.com/deivid-rodriguez/byebug/issues/79). Windows
         | 
| 115 | 
            +
            installation.
         | 
| 86 116 | 
             
            - `condition` command not properly detecting invalid breakpoint ids.
         | 
| 87 117 |  | 
| 88 118 | 
             
            ## 3.5.0 - 2014-09-28
         | 
| 89 119 | 
             
            ### Fixed
         | 
| 90 | 
            -
            - Byebug's history | 
| 120 | 
            +
            - [#81](https://github.com/deivid-rodriguez/byebug/issues/81). Byebug's history
         | 
| 121 | 
            +
            messing up other programs using Readline.
         | 
| 91 122 | 
             
            - Readline's history not being properly saved and inmediately available.
         | 
| 92 123 | 
             
            - User not being notified when trying to debug a non existent script.
         | 
| 93 124 |  | 
| @@ -98,14 +129,14 @@ autoevaluate it. | |
| 98 129 |  | 
| 99 130 | 
             
            ## 3.4.2 - 2014-09-26
         | 
| 100 131 | 
             
            ### Fixed
         | 
| 101 | 
            -
            -  | 
| 102 | 
            -
            ruby -Itest  | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 132 | 
            +
            - [#67](https://github.com/deivid-rodriguez/byebug/issues/67). Debugging
         | 
| 133 | 
            +
            commands invoked by ruby executable, as in `byebug -- ruby -Itest a_test.rb
         | 
| 134 | 
            +
            -n test_something`.
         | 
| 105 135 |  | 
| 106 136 | 
             
            ## 3.4.1 - 2014-09-25
         | 
| 107 137 | 
             
            ### Fixed
         | 
| 108 | 
            -
            - Use of threads | 
| 138 | 
            +
            - [#54](https://github.com/deivid-rodriguez/byebug/issues/54). Use of threads
         | 
| 139 | 
            +
            inside `eval` command.
         | 
| 109 140 | 
             
            - `list` command not listing backwards after reaching the end of the file.
         | 
| 110 141 |  | 
| 111 142 | 
             
            ## 3.4.0 - 2014-09-01
         | 
| @@ -138,16 +169,17 @@ default behaviour though. | |
| 138 169 |  | 
| 139 170 | 
             
            ## 3.2.0 - 2014-08-02
         | 
| 140 171 | 
             
            ### Fixed
         | 
| 141 | 
            -
            -  | 
| 142 | 
            -
             | 
| 143 | 
            -
            -  | 
| 172 | 
            +
            - [#71](https://github.com/deivid-rodriguez/byebug/issues/71). Remote debugging
         | 
| 173 | 
            +
            (thanks @shuky19).
         | 
| 174 | 
            +
            - [#69](https://github.com/deivid-rodriguez/byebug/issues/69). `source` command
         | 
| 175 | 
            +
            (thanks @Olgagr).
         | 
| 144 176 |  | 
| 145 177 | 
             
            ### Removed
         | 
| 146 178 | 
             
            - `post_mortem` activation through `Byebug.post_mortem`. Use `set post_mortem`
         | 
| 147 179 | 
             
            instead.
         | 
| 148 180 | 
             
            - `info stack` command. Use `where` instead.
         | 
| 149 181 | 
             
            - `method iv` command. Use `var instance` instead.
         | 
| 150 | 
            -
            -  | 
| 182 | 
            +
            - [#77](https://github.com/deivid-rodriguez/byebug/issues/77). Warning.
         | 
| 151 183 |  | 
| 152 184 | 
             
            ## 3.1.2 - 2014-04-23
         | 
| 153 185 | 
             
            ### Fixed
         | 
| @@ -179,8 +211,8 @@ global variable tracing. | |
| 179 211 | 
             
            - Plain `byebug` not working when `pry-byebug` installed.
         | 
| 180 212 | 
             
            - `post_mortem` mode.
         | 
| 181 213 | 
             
            - Command history not being saved after regular program termination.
         | 
| 182 | 
            -
            - ( | 
| 183 | 
            -
            @zmoazeni | 
| 214 | 
            +
            - [#54](https://github.com/deivid-rodriguez/byebug/issues/54). (Again) calling
         | 
| 215 | 
            +
            `Byebug.start` with `Timeout.timeout` (thanks @zmoazeni).
         | 
| 184 216 |  | 
| 185 217 | 
             
            ### Added
         | 
| 186 218 | 
             
            - Allow disabling `post_mortem` mode.
         | 
| @@ -191,7 +223,7 @@ like shell's `history` command. | |
| 191 223 | 
             
            - `show/set history filename` is now `show/set histfile`
         | 
| 192 224 | 
             
            - `show/set history size` is now `show/set histsize`
         | 
| 193 225 | 
             
            - `show/set history save` is now `show/set autosave`
         | 
| 194 | 
            -
            - `finish`  | 
| 226 | 
            +
            - `finish` semantics, see
         | 
| 195 227 | 
             
            [61f9b4d](https://github.com/deivid-rodriguez/byebug/commit/61f9b4d).
         | 
| 196 228 | 
             
            - Use `per project` history file by default.
         | 
| 197 229 |  | 
| @@ -200,8 +232,12 @@ like shell's `history` command. | |
| 200 232 | 
             
            command work is always saved now.
         | 
| 201 233 |  | 
| 202 234 | 
             
            ## 2.7.0 - 2014-02-24
         | 
| 203 | 
            -
             | 
| 204 | 
            -
            -  | 
| 235 | 
            +
            ### Fixed
         | 
| 236 | 
            +
            - [#52](https://github.com/deivid-rodriguez/byebug/issues/52). `IGNORED_FILES`
         | 
| 237 | 
            +
            slowing down startup.
         | 
| 238 | 
            +
            - [#53](https://github.com/deivid-rodriguez/byebug/issues/53) and
         | 
| 239 | 
            +
            [#54](https://github.com/deivid-rodriguez/byebug/issues/54). Calling
         | 
| 240 | 
            +
            `Byebug.start` with `Timeout.timeout`.
         | 
| 205 241 |  | 
| 206 242 | 
             
            ## 2.6.0 - 2014-02-08
         | 
| 207 243 | 
             
            ### Fixed
         | 
| @@ -213,13 +249,14 @@ command work is always saved now. | |
| 213 249 |  | 
| 214 250 | 
             
            ## 2.4.1 - 2013-12-05
         | 
| 215 251 | 
             
            ### Fixed
         | 
| 216 | 
            -
            -  | 
| 252 | 
            +
            - [#40](https://github.com/deivid-rodriguez/byebug/issues/40). Installation
         | 
| 253 | 
            +
            error in Mac OSX (thanks @luislavena).
         | 
| 217 254 |  | 
| 218 255 | 
             
            ## 2.4.0 - 2013-12-02
         | 
| 219 256 | 
             
            ### Fixed
         | 
| 220 257 | 
             
            - `thread list` showing too many threads.
         | 
| 221 | 
            -
            - Fix setting post mortem mode with  | 
| 222 | 
            -
            post mortem functionality available as specifying  | 
| 258 | 
            +
            - Fix setting post mortem mode with `set post_mortem`. Now this is the only
         | 
| 259 | 
            +
            post mortem functionality available as specifying `Byebug.post_mortem` with a
         | 
| 223 260 | 
             
            block has been removed in this version.
         | 
| 224 261 |  | 
| 225 262 | 
             
            ### Added
         | 
| @@ -250,7 +287,8 @@ library (thanks @nobu). | |
| 250 287 |  | 
| 251 288 | 
             
            ## 2.2.1 - 2013-09-24
         | 
| 252 289 | 
             
            ### Fixed
         | 
| 253 | 
            -
            -  | 
| 290 | 
            +
            - [#26](https://github.com/deivid-rodriguez/byebug/issues/26). Compilation issue
         | 
| 291 | 
            +
            introduced in `2.2.0`.
         | 
| 254 292 |  | 
| 255 293 | 
             
            ### Changed
         | 
| 256 294 | 
             
            - `show/set stack_trace_on_error` is now `show/set stack_on_error`.
         | 
| @@ -289,7 +327,7 @@ library (thanks @nobu). | |
| 289 327 | 
             
            - `jump` command. It had never worked.
         | 
| 290 328 |  | 
| 291 329 | 
             
            ### Changed
         | 
| 292 | 
            -
            -  | 
| 330 | 
            +
            - Several internal refactorings.
         | 
| 293 331 |  | 
| 294 332 | 
             
            ## 1.8.2 - 2013-08-16
         | 
| 295 333 | 
             
            ### Fixed
         | 
    
        data/CONTRIBUTING.md
    CHANGED
    
    | @@ -1,3 +1,29 @@ | |
| 1 | 
            +
            ## Getting started
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            The following steps should help you getting started:
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * `Byebug` depends on the TracePoint API provided by `ruby-core`. This is a
         | 
| 6 | 
            +
            young API and a lot of bugs have been recently corrected, so make sure you
         | 
| 7 | 
            +
            always have the lastest patch level release installed.
         | 
| 8 | 
            +
            * Get a local clone of `byebug`'s source code.
         | 
| 9 | 
            +
            * Run `bundle install` to get development & test dependencies installed.
         | 
| 10 | 
            +
            * Install the [overcommit][] hooks using `bundle exec overcommit --install`.
         | 
| 11 | 
            +
            They will review your changes before they are committed, checking they are
         | 
| 12 | 
            +
            consistent with the project's code style. If you're changing C files, make sure
         | 
| 13 | 
            +
            you have the GNU indent utility installed in your system. `sudo apt-get install
         | 
| 14 | 
            +
            indent` for linux or `brew install gnu-indent --with-default-names` should do
         | 
| 15 | 
            +
            the job.
         | 
| 16 | 
            +
            * Make sure you compile the C-extension using `bundle exec rake compile`.
         | 
| 17 | 
            +
            Otherwise you won't be able to use `byebug`.
         | 
| 18 | 
            +
            * Run the test suite using the default rake task (`bundle exec rake`). This
         | 
| 19 | 
            +
            task is composed of 2 subtasks: `bundle exec rake compile` && `bundle exec rake
         | 
| 20 | 
            +
            test`.
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            After having done this, just read the code and improve it! Your contribution is
         | 
| 23 | 
            +
            appreciated a lot!
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            [overcommit]: https://github.com/brigade/overcommit/
         | 
| 26 | 
            +
             | 
| 1 27 | 
             
            ## Byebug as a C-extension
         | 
| 2 28 |  | 
| 3 29 | 
             
            Byebug is a gem developed as a C-extension. The debugger internal's
         | 
| @@ -8,34 +34,3 @@ or the feature you are willing to add. You can learn more about C-extensions | |
| 8 34 | 
             
            [here](http://tenderlovemaking.com/2009/12/18/writing-ruby-c-extensions-part-1.html)
         | 
| 9 35 | 
             
            or
         | 
| 10 36 | 
             
            [here](http://tenderlovemaking.com/2010/12/11/writing-ruby-c-extensions-part-2.html).
         | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
            ## Prerequisites
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            `Byebug` depends on the TracePoint API provided by `ruby-core`. This is a young
         | 
| 16 | 
            -
            API and a lot of bugs have been recently corrected. Without this fixes,
         | 
| 17 | 
            -
            `byebug` will fail to work properly, so make sure you have always the last
         | 
| 18 | 
            -
            patch level releases of Ruby installed.
         | 
| 19 | 
            -
             | 
| 20 | 
            -
            Also, if you are developing on linux, make sure you have the GNU indent utility
         | 
| 21 | 
            -
            installed for automatic check of code style in C files. If you're developing in
         | 
| 22 | 
            -
            MacOSX, just make sure you keep a consistent style if you edit the C-extension
         | 
| 23 | 
            -
            files. Travis CI will do the automatic check anyways.
         | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
            ## Getting started
         | 
| 27 | 
            -
             | 
| 28 | 
            -
            Once you have a local clone of `byebug`, you can start digging in the source
         | 
| 29 | 
            -
            code. First run `bundle install` to get development & test dependencies
         | 
| 30 | 
            -
            installed. Also make sure you compile the C-extension using `bundle exec rake
         | 
| 31 | 
            -
            compile`, otherwise you won't be able to use your local clone. You can also run
         | 
| 32 | 
            -
            the test suite as the default rake task (`bundle exec rake`). This task is
         | 
| 33 | 
            -
            composed of 4 subtasks:
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                bundle exec rake compile # compiles the C-extension
         | 
| 36 | 
            -
                bundle exec rake test # Run the test suite
         | 
| 37 | 
            -
                bundle exec rake rubocop # Run RuboCop's checks on the Ruby files
         | 
| 38 | 
            -
                bundle exec rake ccop # Run `indent`'s checks on the C files
         | 
| 39 | 
            -
             | 
| 40 | 
            -
            After having done this, just read the code and improve it! Your contribution is
         | 
| 41 | 
            -
            appreciated a lot!
         | 
    
        data/README.md
    CHANGED
    
    | @@ -97,7 +97,7 @@ are debugging rails, start the server and once the execution gets to your | |
| 97 97 | 
             
                `frame`     |              |
         | 
| 98 98 | 
             
                `help`      |              |
         | 
| 99 99 | 
             
                `history`   |              |
         | 
| 100 | 
            -
                `info`      |              | `args` `breakpoints` `catch` `display` `file` ` | 
| 100 | 
            +
                `info`      |              | `args` `breakpoints` `catch` `display` `file` `line` `program`
         | 
| 101 101 | 
             
                `irb`       |              |
         | 
| 102 102 | 
             
                `kill`      |              |
         | 
| 103 103 | 
             
                `list`      |              |
         | 
| @@ -110,8 +110,8 @@ are debugging rails, start the server and once the execution gets to your | |
| 110 110 | 
             
                `quit`      | `exit`       |
         | 
| 111 111 | 
             
                `restart`   |              |
         | 
| 112 112 | 
             
                `save`      |              |
         | 
| 113 | 
            -
                `set`       |              | `autoeval` `autoirb` `autolist` `autosave` `basename` `callstyle` `fullpath` `histfile` `histsize` `linetrace` `listsize` `post_mortem` `stack_on_error` `verbose` `width`
         | 
| 114 | 
            -
                `show`      |              | `autoeval` `autoirb` `autolist` `autosave` `basename` `callstyle` `fullpath` `histfile` `histsize` `linetrace` `listsize` `post_mortem` `stack_on_error` `verbose` `width`
         | 
| 113 | 
            +
                `set`       |              | `autoeval` `autoirb` `autolist` `autosave` `basename` `callstyle` `fullpath` `histfile` `histsize` `linetrace` `listsize` `post_mortem` `savefile` `stack_on_error` `verbose` `width`
         | 
| 114 | 
            +
                `show`      |              | `autoeval` `autoirb` `autolist` `autosave` `basename` `callstyle` `fullpath` `histfile` `histsize` `linetrace` `listsize` `post_mortem` `savefile` `stack_on_error` `verbose` `width`
         | 
| 115 115 | 
             
                `source`    |              |
         | 
| 116 116 | 
             
                `step`      |              |
         | 
| 117 117 | 
             
                `thread`    |              | `current` `list` `resume` `stop` `switch`
         | 
    
        data/lib/byebug/breakpoint.rb
    CHANGED
    
    | @@ -48,7 +48,8 @@ module Byebug | |
| 48 48 | 
             
                # @param filename [String] File name to inspect for possible breakpoints
         | 
| 49 49 | 
             
                #
         | 
| 50 50 | 
             
                def self.potential_lines(filename)
         | 
| 51 | 
            -
                  name | 
| 51 | 
            +
                  name = "#{Time.new.to_i}_#{rand(2**31)}"
         | 
| 52 | 
            +
                  lines = {}
         | 
| 52 53 | 
             
                  iseq = RubyVM::InstructionSequence.compile(File.read(filename), name)
         | 
| 53 54 |  | 
| 54 55 | 
             
                  iseq.disasm.each_line do |line|
         | 
    
        data/lib/byebug/command.rb
    CHANGED
    
    | @@ -1,29 +1,36 @@ | |
| 1 1 | 
             
            require 'columnize'
         | 
| 2 2 | 
             
            require 'forwardable'
         | 
| 3 | 
            -
            require 'byebug/ | 
| 3 | 
            +
            require 'byebug/helpers/string'
         | 
| 4 4 |  | 
| 5 5 | 
             
            module Byebug
         | 
| 6 6 | 
             
              #
         | 
| 7 7 | 
             
              # Parent class of all byebug commands.
         | 
| 8 8 | 
             
              #
         | 
| 9 | 
            -
              # Subclasses need to implement a `regexp` and an `execute`  | 
| 9 | 
            +
              # Subclasses need to implement a `regexp` method and an `execute` method.
         | 
| 10 10 | 
             
              #
         | 
| 11 11 | 
             
              class Command
         | 
| 12 12 | 
             
                extend Forwardable
         | 
| 13 13 |  | 
| 14 | 
            -
                include  | 
| 15 | 
            -
                include FileFunctions
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                Subcmd = Struct.new(:name, :min, :help)
         | 
| 14 | 
            +
                include Helpers::StringHelper
         | 
| 18 15 |  | 
| 19 16 | 
             
                def initialize(state)
         | 
| 20 | 
            -
                  @match | 
| 17 | 
            +
                  @match = nil
         | 
| 18 | 
            +
                  @state = state
         | 
| 21 19 | 
             
                end
         | 
| 22 20 |  | 
| 23 21 | 
             
                def match(input)
         | 
| 24 22 | 
             
                  @match = regexp.match(input)
         | 
| 25 23 | 
             
                end
         | 
| 26 24 |  | 
| 25 | 
            +
                def_delegators :'self.class', :to_name, :description
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                #
         | 
| 28 | 
            +
                # Default help text for a command.
         | 
| 29 | 
            +
                #
         | 
| 30 | 
            +
                def help
         | 
| 31 | 
            +
                  prettify(description)
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 27 34 | 
             
                def_delegator :"Byebug.printer", :print, :pr
         | 
| 28 35 | 
             
                def_delegator :"Byebug.printer", :print_collection, :prc
         | 
| 29 36 | 
             
                def_delegator :"Byebug.printer", :print_variables, :prv
         | 
| @@ -65,8 +72,6 @@ module Byebug | |
| 65 72 | 
             
                end
         | 
| 66 73 |  | 
| 67 74 | 
             
                class << self
         | 
| 68 | 
            -
                  include StringFunctions
         | 
| 69 | 
            -
             | 
| 70 75 | 
             
                  attr_accessor :allow_in_control
         | 
| 71 76 | 
             
                  attr_writer :allow_in_post_mortem, :always_run
         | 
| 72 77 |  | 
| @@ -78,49 +83,22 @@ module Byebug | |
| 78 83 | 
             
                    @always_run ||= 0
         | 
| 79 84 | 
             
                  end
         | 
| 80 85 |  | 
| 81 | 
            -
                   | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
                     | 
| 86 | 
            -
                    output
         | 
| 86 | 
            +
                  #
         | 
| 87 | 
            +
                  # Name of the command, as executed by the user.
         | 
| 88 | 
            +
                  #
         | 
| 89 | 
            +
                  def to_name
         | 
| 90 | 
            +
                    name.gsub(/^Byebug::/, '').gsub(/Command$/, '').downcase
         | 
| 87 91 | 
             
                  end
         | 
| 88 92 |  | 
| 89 | 
            -
                   | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
                     | 
| 96 | 
            -
             | 
| 97 | 
            -
                    nil
         | 
| 98 | 
            -
                  end
         | 
| 99 | 
            -
             | 
| 100 | 
            -
                  def format_subcmd(subcmd_name)
         | 
| 101 | 
            -
                    subcmd = find(self::Subcommands, subcmd_name)
         | 
| 102 | 
            -
                    return "Invalid \"#{names.join('|')}\" " \
         | 
| 103 | 
            -
                           "subcommand \"#{args[1]}\"." unless subcmd
         | 
| 104 | 
            -
             | 
| 105 | 
            -
                    "\n  #{subcmd.help}.\n\n"
         | 
| 106 | 
            -
                  end
         | 
| 107 | 
            -
             | 
| 108 | 
            -
                  def format_subcmds
         | 
| 109 | 
            -
                    header = names.join('|')
         | 
| 110 | 
            -
                    s = "  List of \"#{header}\" subcommands:\n  --\n"
         | 
| 111 | 
            -
                    w = self::Subcommands.map(&:name).max_by(&:size).size
         | 
| 112 | 
            -
                    self::Subcommands.each do |subcmd|
         | 
| 113 | 
            -
                      s += format("  %s %-#{w}s -- %s\n", header, subcmd.name, subcmd.help)
         | 
| 114 | 
            -
                    end
         | 
| 115 | 
            -
                    s + "\n"
         | 
| 116 | 
            -
                  end
         | 
| 117 | 
            -
             | 
| 118 | 
            -
                  def commands
         | 
| 119 | 
            -
                    @commands ||= []
         | 
| 120 | 
            -
                  end
         | 
| 93 | 
            +
                  #
         | 
| 94 | 
            +
                  # Available subcommands for the current command
         | 
| 95 | 
            +
                  #
         | 
| 96 | 
            +
                  # A subcommand is any class defined inside the parent's command class
         | 
| 97 | 
            +
                  #
         | 
| 98 | 
            +
                  def subcommands
         | 
| 99 | 
            +
                    const_list = constants(false).map { |const| const_get(const, false) }
         | 
| 121 100 |  | 
| 122 | 
            -
             | 
| 123 | 
            -
                    commands << klass
         | 
| 101 | 
            +
                    const_list.select { |c| c.is_a?(Class) }
         | 
| 124 102 | 
             
                  end
         | 
| 125 103 | 
             
                end
         | 
| 126 104 | 
             
              end
         | 
| @@ -1,10 +1,15 @@ | |
| 1 1 | 
             
            require 'byebug/command'
         | 
| 2 | 
            +
            require 'byebug/helpers/file'
         | 
| 3 | 
            +
            require 'byebug/helpers/parse'
         | 
| 2 4 |  | 
| 3 5 | 
             
            module Byebug
         | 
| 4 6 | 
             
              #
         | 
| 5 7 | 
             
              # Implements breakpoint functionality
         | 
| 6 8 | 
             
              #
         | 
| 7 9 | 
             
              class BreakCommand < Command
         | 
| 10 | 
            +
                include Helpers::FileHelper
         | 
| 11 | 
            +
                include Helpers::ParseHelper
         | 
| 12 | 
            +
             | 
| 8 13 | 
             
                self.allow_in_post_mortem = false
         | 
| 9 14 | 
             
                self.allow_in_control = true
         | 
| 10 15 |  | 
| @@ -13,7 +18,7 @@ module Byebug | |
| 13 18 | 
             
                end
         | 
| 14 19 |  | 
| 15 20 | 
             
                def execute
         | 
| 16 | 
            -
                  return puts( | 
| 21 | 
            +
                  return puts(help) unless @match[1]
         | 
| 17 22 |  | 
| 18 23 | 
             
                  b = line_breakpoint(@match[1]) || method_breakpoint(@match[1])
         | 
| 19 24 |  | 
| @@ -27,25 +32,24 @@ module Byebug | |
| 27 32 | 
             
                  errmsg(e.message)
         | 
| 28 33 | 
             
                end
         | 
| 29 34 |  | 
| 30 | 
            -
                 | 
| 31 | 
            -
                   | 
| 32 | 
            -
             | 
| 33 | 
            -
                  end
         | 
| 35 | 
            +
                def short_description
         | 
| 36 | 
            +
                  'Set breakpoint to some position, (optionally) if expr == true'
         | 
| 37 | 
            +
                end
         | 
| 34 38 |  | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            +
                def description
         | 
| 40 | 
            +
                  <<-EOD
         | 
| 41 | 
            +
                    b[reak] [file:]line [if expr]
         | 
| 42 | 
            +
                    b[reak] [module::...]class(.|#)method [if expr]
         | 
| 39 43 |  | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
                  end
         | 
| 44 | 
            +
                    #{short_description}
         | 
| 45 | 
            +
                  EOD
         | 
| 43 46 | 
             
                end
         | 
| 44 47 |  | 
| 45 48 | 
             
                private
         | 
| 46 49 |  | 
| 47 50 | 
             
                def line_breakpoint(loc)
         | 
| 48 | 
            -
                  line | 
| 51 | 
            +
                  line = loc.match(/^(\d+)$/)
         | 
| 52 | 
            +
                  file_line = loc.match(/^([^:]+):(\d+)$/)
         | 
| 49 53 | 
             
                  return nil unless line || file_line
         | 
| 50 54 |  | 
| 51 55 | 
             
                  f, l = line ? [@state.file, line[1]] : [file_line[1], file_line[2]]
         | 
| @@ -57,7 +61,8 @@ module Byebug | |
| 57 61 |  | 
| 58 62 | 
             
                def method_breakpoint(location)
         | 
| 59 63 | 
             
                  location.match(/([^.#]+)[.#](.+)/) do |match|
         | 
| 60 | 
            -
                    k | 
| 64 | 
            +
                    k = bb_warning_eval(match[1])
         | 
| 65 | 
            +
                    m = match[2]
         | 
| 61 66 |  | 
| 62 67 | 
             
                    klass = k && k.is_a?(Module) ? k.name : match[1]
         | 
| 63 68 | 
             
                    method = m.intern
         | 
| @@ -67,7 +72,8 @@ module Byebug | |
| 67 72 | 
             
                end
         | 
| 68 73 |  | 
| 69 74 | 
             
                def check_errors(file, line)
         | 
| 70 | 
            -
                  path | 
| 75 | 
            +
                  path = File.expand_path(file)
         | 
| 76 | 
            +
                  deco_path = normalize(file)
         | 
| 71 77 |  | 
| 72 78 | 
             
                  fail(pr('break.errors.source', file: deco_path)) unless File.exist?(path)
         | 
| 73 79 |  |