byebug 9.0.5 → 11.1.3
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 +5 -5
- data/CHANGELOG.md +399 -264
- data/CONTRIBUTING.md +12 -19
- data/GUIDE.md +40 -26
- data/LICENSE +18 -18
- data/README.md +103 -74
- data/exe/byebug +6 -0
- data/ext/byebug/breakpoint.c +2 -2
- data/ext/byebug/byebug.c +26 -31
- data/ext/byebug/byebug.h +44 -28
- data/ext/byebug/context.c +45 -32
- data/ext/byebug/extconf.rb +7 -5
- data/ext/byebug/locker.c +4 -4
- data/ext/byebug/threads.c +12 -12
- data/lib/byebug/attacher.rb +18 -4
- data/lib/byebug/breakpoint.rb +26 -6
- data/lib/byebug/command.rb +20 -14
- data/lib/byebug/command_list.rb +3 -1
- data/lib/byebug/commands/break.rb +36 -22
- data/lib/byebug/commands/catch.rb +16 -18
- data/lib/byebug/commands/condition.rb +11 -11
- data/lib/byebug/commands/continue.rb +32 -12
- data/lib/byebug/commands/debug.rb +7 -5
- data/lib/byebug/commands/delete.rb +13 -11
- data/lib/byebug/commands/disable/breakpoints.rb +7 -5
- data/lib/byebug/commands/disable/display.rb +7 -5
- data/lib/byebug/commands/disable.rb +8 -6
- data/lib/byebug/commands/display.rb +11 -9
- data/lib/byebug/commands/down.rb +10 -8
- data/lib/byebug/commands/edit.rb +11 -8
- data/lib/byebug/commands/enable/breakpoints.rb +7 -5
- data/lib/byebug/commands/enable/display.rb +7 -5
- data/lib/byebug/commands/enable.rb +8 -6
- data/lib/byebug/commands/finish.rb +9 -7
- data/lib/byebug/commands/frame.rb +11 -9
- data/lib/byebug/commands/help.rb +7 -5
- data/lib/byebug/commands/history.rb +7 -5
- data/lib/byebug/commands/info/breakpoints.rb +18 -14
- data/lib/byebug/commands/info/display.rb +16 -9
- data/lib/byebug/commands/info/file.rb +13 -14
- data/lib/byebug/commands/info/line.rb +5 -3
- data/lib/byebug/commands/info/program.rb +8 -6
- data/lib/byebug/commands/info.rb +11 -9
- data/lib/byebug/commands/interrupt.rb +8 -4
- data/lib/byebug/commands/irb.rb +13 -12
- data/lib/byebug/commands/kill.rb +11 -11
- data/lib/byebug/commands/list.rb +41 -46
- data/lib/byebug/commands/method.rb +10 -8
- data/lib/byebug/commands/next.rb +8 -6
- data/lib/byebug/commands/pry.rb +10 -10
- data/lib/byebug/commands/quit.rb +10 -8
- data/lib/byebug/commands/restart.rb +30 -11
- data/lib/byebug/commands/save.rb +10 -8
- data/lib/byebug/commands/set.rb +13 -11
- data/lib/byebug/commands/show.rb +7 -5
- data/lib/byebug/commands/skip.rb +85 -0
- data/lib/byebug/commands/source.rb +7 -7
- data/lib/byebug/commands/step.rb +8 -6
- data/lib/byebug/commands/thread/current.rb +6 -4
- data/lib/byebug/commands/thread/list.rb +7 -5
- data/lib/byebug/commands/thread/resume.rb +7 -7
- data/lib/byebug/commands/thread/stop.rb +6 -4
- data/lib/byebug/commands/thread/switch.rb +6 -4
- data/lib/byebug/commands/thread.rb +11 -9
- data/lib/byebug/commands/tracevar.rb +10 -11
- data/lib/byebug/commands/undisplay.rb +12 -11
- data/lib/byebug/commands/untracevar.rb +8 -6
- data/lib/byebug/commands/up.rb +10 -8
- data/lib/byebug/commands/var/all.rb +7 -5
- data/lib/byebug/commands/var/args.rb +6 -4
- data/lib/byebug/commands/var/const.rb +9 -9
- data/lib/byebug/commands/var/global.rb +5 -3
- data/lib/byebug/commands/var/instance.rb +6 -4
- data/lib/byebug/commands/var/local.rb +6 -4
- data/lib/byebug/commands/var.rb +12 -10
- data/lib/byebug/commands/where.rb +9 -7
- data/lib/byebug/commands.rb +40 -37
- data/lib/byebug/context.rb +7 -5
- data/lib/byebug/core.rb +26 -25
- data/lib/byebug/errors.rb +4 -2
- data/lib/byebug/frame.rb +19 -22
- data/lib/byebug/helpers/bin.rb +47 -0
- data/lib/byebug/helpers/eval.rb +15 -13
- data/lib/byebug/helpers/file.rb +6 -4
- data/lib/byebug/helpers/frame.rb +7 -5
- data/lib/byebug/helpers/parse.rb +5 -5
- data/lib/byebug/helpers/path.rb +9 -11
- data/lib/byebug/helpers/reflection.rb +2 -0
- data/lib/byebug/helpers/string.rb +11 -2
- data/lib/byebug/helpers/thread.rb +10 -8
- data/lib/byebug/helpers/toggle.rb +28 -27
- data/lib/byebug/helpers/var.rb +9 -7
- data/lib/byebug/history.rb +20 -11
- data/lib/byebug/interface.rb +13 -11
- data/lib/byebug/interfaces/local_interface.rb +25 -7
- data/lib/byebug/interfaces/remote_interface.rb +21 -9
- data/lib/byebug/interfaces/script_interface.rb +4 -1
- data/lib/byebug/interfaces/test_interface.rb +5 -3
- data/lib/byebug/option_setter.rb +14 -12
- data/lib/byebug/printers/base.rb +10 -10
- data/lib/byebug/printers/plain.rb +9 -8
- data/lib/byebug/printers/texts/base.yml +7 -3
- data/lib/byebug/printers/texts/plain.yml +1 -1
- data/lib/byebug/processors/command_processor.rb +11 -12
- data/lib/byebug/processors/control_processor.rb +4 -6
- data/lib/byebug/processors/post_mortem_processor.rb +4 -2
- data/lib/byebug/processors/script_processor.rb +7 -3
- data/lib/byebug/remote/client.rb +57 -0
- data/lib/byebug/remote/server.rb +47 -0
- data/lib/byebug/remote.rb +46 -66
- data/lib/byebug/runner.rb +43 -49
- data/lib/byebug/setting.rb +11 -5
- data/lib/byebug/settings/autoirb.rb +7 -5
- data/lib/byebug/settings/autolist.rb +7 -5
- data/lib/byebug/settings/autopry.rb +7 -5
- data/lib/byebug/settings/autosave.rb +4 -2
- data/lib/byebug/settings/basename.rb +4 -2
- data/lib/byebug/settings/callstyle.rb +4 -3
- data/lib/byebug/settings/fullpath.rb +4 -2
- data/lib/byebug/settings/histfile.rb +5 -3
- data/lib/byebug/settings/histsize.rb +4 -2
- data/lib/byebug/settings/linetrace.rb +6 -4
- data/lib/byebug/settings/listsize.rb +4 -2
- data/lib/byebug/settings/post_mortem.rb +6 -4
- data/lib/byebug/settings/savefile.rb +4 -2
- data/lib/byebug/settings/stack_on_error.rb +4 -2
- data/lib/byebug/settings/width.rb +3 -1
- data/lib/byebug/source_file_formatter.rb +71 -0
- data/lib/byebug/subcommands.rb +6 -4
- data/lib/byebug/version.rb +2 -1
- data/lib/byebug.rb +3 -1
- metadata +22 -20
- data/bin/byebug +0 -7
data/CONTRIBUTING.md
CHANGED
@@ -26,32 +26,25 @@ abide by its terms.
|
|
26
26
|
|
27
27
|
## Running the test suite
|
28
28
|
|
29
|
-
* Make sure you compile the C-extension using `
|
29
|
+
* Make sure you compile the C-extension using `bin/rake compile`.
|
30
30
|
Otherwise you won't be able to use `byebug`.
|
31
|
-
* Run the test suite using the default rake task (`
|
32
|
-
|
33
|
-
`bundle exec rake test`.
|
31
|
+
* Run the test suite using the default rake task (`bin/rake`). This task is
|
32
|
+
composed of 3 subtasks: `bin/rake compile`, `bin/rake test` & `bin/rake lint`.
|
34
33
|
* If you want to run specific tests, use the provided test runner, like so:
|
35
|
-
* Specific test files. For example,
|
36
|
-
|
37
|
-
* Specific test classes. For example,
|
38
|
-
`script/minitest_runner.rb Byebug::BreakAtLinesTestCase`
|
34
|
+
* Specific test files. For example, `bin/minitest test/commands/break_test.rb`
|
35
|
+
* Specific test classes. For example, `bin/minitest BreakAtLinesTest`
|
39
36
|
* Specific tests. For example,
|
40
|
-
`
|
37
|
+
`bin/minitest test_catch_removes_specific_catchpoint`
|
41
38
|
* Specific fully qualified tests. For example,
|
42
|
-
`
|
43
|
-
BreakAtLinesTest#test_setting_breakpoint_sets_correct_fields`
|
39
|
+
`bin/minitest BreakAtLinesTest#test_setting_breakpoint_sets_correct_fields`
|
44
40
|
* You can combine any of them and you will get the union of all filters. For
|
45
|
-
example: `
|
41
|
+
example: `bin/minitest BreakAtLinesTest
|
46
42
|
test_catch_removes_specific_catchpoint`
|
47
43
|
|
48
44
|
## Code style
|
49
45
|
|
50
|
-
* Byebug uses
|
51
|
-
|
52
|
-
are committed, checking they are consistent with the project's code style.
|
53
|
-
|
54
|
-
[overcommit]: https://github.com/brigade/overcommit/
|
46
|
+
* Byebug uses several style checks to check code style consistent. You can run
|
47
|
+
those using `bin/rake lint`.
|
55
48
|
|
56
49
|
## Byebug as a C-extension
|
57
50
|
|
@@ -60,6 +53,6 @@ functionality is implemented in C (the interaction with the TracePoint API).
|
|
60
53
|
The rest of the gem is implemented in Ruby. Normally you won't need to touch
|
61
54
|
the C-extension, but it will obviously depended on the bug you're trying to fix
|
62
55
|
or the feature you are willing to add. You can learn more about C-extensions
|
63
|
-
[here](
|
56
|
+
[here](https://tenderlovemaking.com/2009/12/18/writing-ruby-c-extensions-part-1.html)
|
64
57
|
or
|
65
|
-
[here](
|
58
|
+
[here](https://tenderlovemaking.com/2010/12/11/writing-ruby-c-extensions-part-2.html).
|
data/GUIDE.md
CHANGED
@@ -69,12 +69,12 @@ Now let us step through the program.
|
|
69
69
|
5: tri = 0
|
70
70
|
6:
|
71
71
|
7: 0.upto(n) { |i| tri += i }
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
72
|
+
8:
|
73
|
+
9: tri
|
74
|
+
10: end
|
75
|
+
11:
|
76
|
+
=> 12: t = triangle(3)
|
77
|
+
13: puts t
|
78
78
|
(byebug) <RET> # hit enter
|
79
79
|
|
80
80
|
[1, 10] in /path/to/triangle.rb
|
@@ -186,7 +186,21 @@ end
|
|
186
186
|
|
187
187
|
n_args = $ARGV.length
|
188
188
|
|
189
|
-
|
189
|
+
raise("*** Need number of disks or no parameter") if n_args > 1
|
190
|
+
|
191
|
+
n = 3
|
192
|
+
|
193
|
+
if n_args > 0
|
194
|
+
begin
|
195
|
+
n = $ARGV[0].to_i
|
196
|
+
rescue ValueError
|
197
|
+
raise("*** Expecting an integer, got: #{$ARGV[0]}")
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
raise("*** Number of disks should be between 1 and 100") if n < 1 || n > 100
|
202
|
+
|
203
|
+
hanoi(n, :a, :b, :c)
|
190
204
|
```
|
191
205
|
|
192
206
|
Recall in the first section it was stated that before the `def` is run, the
|
@@ -316,7 +330,7 @@ Now let's see what happens after stepping:
|
|
316
330
|
11:
|
317
331
|
=> 12: n_args = $ARGV.length
|
318
332
|
13:
|
319
|
-
14:
|
333
|
+
14: raise("*** Need number of disks or no parameter") if n_args > 1
|
320
334
|
(byebug) private_methods.member?(:hanoi)
|
321
335
|
true
|
322
336
|
(byebug)
|
@@ -335,7 +349,7 @@ can use the `restart` command here.
|
|
335
349
|
```bash
|
336
350
|
(byebug) restart 3
|
337
351
|
Re exec'ing:
|
338
|
-
/path/to/
|
352
|
+
/path/to/exe/byebug /path/to/hanoi.rb 3
|
339
353
|
|
340
354
|
[1, 10] in /path/to/hanoi.rb
|
341
355
|
1: #
|
@@ -442,15 +456,15 @@ NameError Exception: undefined local variable or method `n_args' for main:Object
|
|
442
456
|
19: begin
|
443
457
|
20: n = $ARGV[0].to_i
|
444
458
|
21: rescue ValueError
|
445
|
-
22: raise("
|
459
|
+
22: raise("*** Expecting an integer, got: #{$ARGV[0]}")
|
446
460
|
23: end
|
447
461
|
24: end
|
448
462
|
25:
|
449
|
-
26:
|
463
|
+
26: raise("*** Number of disks should be between 1 and 100") if n < 1 || n > 100
|
450
464
|
27:
|
451
465
|
=> 28: hanoi(n, :a, :b, :c)
|
452
466
|
(byebug) n_args
|
453
|
-
|
467
|
+
1
|
454
468
|
(byebug) eval n
|
455
469
|
3
|
456
470
|
(byebug) down 2
|
@@ -513,8 +527,8 @@ framework for that. Here's the test code, it should be placed in the same
|
|
513
527
|
directory as `triangle.rb`.
|
514
528
|
|
515
529
|
```ruby
|
516
|
-
require
|
517
|
-
require_relative
|
530
|
+
require "minitest/autorun"
|
531
|
+
require_relative "triangle.rb"
|
518
532
|
|
519
533
|
class TestTriangle < Minitest::Test
|
520
534
|
def test_basic
|
@@ -522,7 +536,7 @@ class TestTriangle < Minitest::Test
|
|
522
536
|
|
523
537
|
0.upto(5) { |i| solutions << triangle(i) }
|
524
538
|
|
525
|
-
assert_equal([0, 1, 3, 6, 10, 15], solutions,
|
539
|
+
assert_equal([0, 1, 3, 6, 10, 15], solutions, "First 5 triangle numbers")
|
526
540
|
end
|
527
541
|
end
|
528
542
|
```
|
@@ -547,7 +561,7 @@ Run options: --seed 31679
|
|
547
561
|
# Running:
|
548
562
|
|
549
563
|
[2, 11] in test_triangle.rb
|
550
|
-
2: require_relative
|
564
|
+
2: require_relative "triangle.rb"
|
551
565
|
3:
|
552
566
|
4: class TestTriangle < Minitest::Test
|
553
567
|
5: def test_basic
|
@@ -556,7 +570,7 @@ Run options: --seed 31679
|
|
556
570
|
8:
|
557
571
|
9: 0.upto(5) { |i| solutions << triangle(i) }
|
558
572
|
10:
|
559
|
-
11: assert_equal([0, 1, 3, 6, 10, 15], solutions,
|
573
|
+
11: assert_equal([0, 1, 3, 6, 10, 15], solutions, "First 5 triangle numbers")
|
560
574
|
(byebug)
|
561
575
|
```
|
562
576
|
|
@@ -599,7 +613,7 @@ We get the same result as if we had run byebug from the outset.
|
|
599
613
|
### Debugging Oddities: How debugging Ruby may be different from other languages
|
600
614
|
|
601
615
|
If you are used to debugging in other languages like C, C++, Perl, Java or even
|
602
|
-
Bash (see [bashdb](http://bashdb.
|
616
|
+
Bash (see [bashdb](http://bashdb.sourceforge.net)), there may be a number of things that
|
603
617
|
seem or feel a little bit different and may confuse you. A number of these
|
604
618
|
things aren't oddities of the debugger per se but differences in how Ruby works
|
605
619
|
compared to those other languages. Because Ruby works a little differently from
|
@@ -726,7 +740,7 @@ _current_ class of the object.
|
|
726
740
|
Consider the following little Ruby program.
|
727
741
|
|
728
742
|
```ruby
|
729
|
-
|
743
|
+
"Yes it does" =~ /
|
730
744
|
(Yes) \s+
|
731
745
|
it \s+
|
732
746
|
does
|
@@ -939,8 +953,7 @@ We have started by debugging the `employee` thread. To do that, we switch to
|
|
939
953
|
that thread using the `thread switch 3` command. The thread number is the one
|
940
954
|
specified by `thread list`, we know this is our worker thread because `thread
|
941
955
|
list` specifies where the thread is defined in the file (and its current
|
942
|
-
position if the thread is currently running
|
943
|
-
since Ruby 2.2.1).
|
956
|
+
position if the thread is currently running).
|
944
957
|
|
945
958
|
After that we stopped the main thread and the worker thread, using the command
|
946
959
|
`thread stop`. We do this because we want to focus on the employee thread first
|
@@ -1285,7 +1298,7 @@ Running a program from byebug adds a bit of overhead and slows it down a little.
|
|
1285
1298
|
Furthermore, by necessity, debuggers change the operation of the program they
|
1286
1299
|
are debugging. And this can lead to unexpected and unwanted differences. It has
|
1287
1300
|
happened so often that the term
|
1288
|
-
[Heisenbugs](
|
1301
|
+
[Heisenbugs](https://en.wikipedia.org/wiki/Heisenbug) was coined to describe the
|
1289
1302
|
situation where using a debugger (among other possibilities) changes the
|
1290
1303
|
behavior of the program so that the bug doesn't manifest itself anymore.
|
1291
1304
|
|
@@ -1298,7 +1311,7 @@ at the same speed as if there were no byebug.
|
|
1298
1311
|
To enter byebug this way, just drop `byebug` in whichever line you want to start
|
1299
1312
|
debugging at. You also have to require byebug somehow. If using bundler, it will
|
1300
1313
|
take care of that for you, otherwise you can use the ruby `-r` flag or add
|
1301
|
-
`require
|
1314
|
+
`require "byebug"` in the line previous to the `byebug` call.
|
1302
1315
|
|
1303
1316
|
If speed is crucial, you may want to start and stop this around certain sections
|
1304
1317
|
of code, using `Byebug.start` and `Byebug.stop`. Alternatively, instead of
|
@@ -1314,7 +1327,7 @@ problem you want to investigate. And since `byebug` is just a method call it's
|
|
1314
1327
|
possible to enclose it in a conditional expression, for example
|
1315
1328
|
|
1316
1329
|
```ruby
|
1317
|
-
byebug if
|
1330
|
+
byebug if "bar" == foo and 20 == iter_count
|
1318
1331
|
```
|
1319
1332
|
|
1320
1333
|
### Restarting Byebug
|
@@ -1341,9 +1354,9 @@ program that you want to debug (In Rails, the
|
|
1341
1354
|
`config/environments/development.rb` could be a good candidate).
|
1342
1355
|
|
1343
1356
|
```ruby
|
1344
|
-
require
|
1357
|
+
require "byebug/core"
|
1345
1358
|
Byebug.wait_connection = true
|
1346
|
-
Byebug.start_server(
|
1359
|
+
Byebug.start_server("localhost", <port>)
|
1347
1360
|
```
|
1348
1361
|
|
1349
1362
|
Once this piece gets executed, you can connect to the remote debugger from your
|
@@ -1455,6 +1468,7 @@ display a short list of named classes of commands
|
|
1455
1468
|
save -- Saves current byebug session to a file
|
1456
1469
|
set -- Modifies byebug settings
|
1457
1470
|
show -- Shows byebug settings
|
1471
|
+
skip -- Runs until the next breakpoint as long as it is different from the current one
|
1458
1472
|
source -- Restores a previously saved byebug session
|
1459
1473
|
step -- Steps into blocks or methods one or more times
|
1460
1474
|
thread -- Commands to manipulate threads
|
data/LICENSE
CHANGED
@@ -1,23 +1,23 @@
|
|
1
|
-
Copyright (c) David Rodríguez <deivid.rodriguez@
|
1
|
+
Copyright (c) 2018 David Rodríguez <deivid.rodriguez@riseup.net>
|
2
2
|
All rights reserved.
|
3
3
|
|
4
4
|
Redistribution and use in source and binary forms, with or without
|
5
|
-
modification, are permitted provided that the following conditions
|
6
|
-
are met:
|
7
|
-
1. Redistributions of source code must retain the above copyright
|
8
|
-
notice, this list of conditions and the following disclaimer.
|
9
|
-
2. Redistributions in binary form must reproduce the above copyright
|
10
|
-
notice, this list of conditions and the following disclaimer in the
|
11
|
-
documentation and/or other materials provided with the distribution.
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
12
6
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
7
|
+
* Redistributions of source code must retain the above copyright notice, this
|
8
|
+
list of conditions and the following disclaimer.
|
9
|
+
|
10
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
11
|
+
this list of conditions and the following disclaimer in the documentation
|
12
|
+
and/or other materials provided with the distribution.
|
13
|
+
|
14
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
15
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
16
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
17
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
17
18
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
18
|
-
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
SUCH DAMAGE.
|
19
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
20
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
21
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
22
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
23
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
CHANGED
@@ -1,30 +1,25 @@
|
|
1
1
|
# Byebug
|
2
2
|
|
3
3
|
[![Version][gem]][gem_url]
|
4
|
-
[![
|
5
|
-
[![Coverage][cov]][cov_url]
|
6
|
-
[![Gratipay][tip]][tip_url]
|
4
|
+
[![Tidelift][tid]][tid_url]
|
7
5
|
[![Gitter][irc]][irc_url]
|
8
6
|
|
9
7
|
[gem]: https://img.shields.io/gem/v/byebug.svg
|
10
|
-
[
|
11
|
-
[cov]: https://img.shields.io/codeclimate/coverage/github/deivid-rodriguez/byebug.svg
|
12
|
-
[tip]: https://img.shields.io/gittip/byebug.svg
|
8
|
+
[tid]: https://tidelift.com/badges/package/rubygems/byebug
|
13
9
|
[irc]: https://img.shields.io/badge/IRC%20(gitter)-devs%20%26%20users-brightgreen.svg
|
14
10
|
|
15
11
|
[gem_url]: https://rubygems.org/gems/byebug
|
16
|
-
[
|
17
|
-
[cov_url]: https://codeclimate.com/github/deivid-rodriguez/byebug
|
18
|
-
[tip_url]: https://gratipay.com/byebug
|
12
|
+
[tid_url]: https://tidelift.com/subscription/pkg/rubygems-byebug?utm_source=rubygems-byebug&utm_medium=readme_badge
|
19
13
|
[irc_url]: https://gitter.im/deivid-rodriguez/byebug
|
20
14
|
|
21
|
-
Byebug is a simple to use
|
22
|
-
TracePoint API for execution control and the
|
23
|
-
|
24
|
-
|
15
|
+
Byebug is a simple to use and feature rich debugger for Ruby. It uses the
|
16
|
+
TracePoint API for execution control and the Debug Inspector API for call stack
|
17
|
+
navigation. Therefore, Byebug doesn't depend on internal core sources. Byebug is also
|
18
|
+
fast because it is developed as a C extension and reliable because it is supported
|
19
|
+
by a full test suite.
|
25
20
|
|
26
|
-
|
27
|
-
and offers many of the traditional debugging features such as:
|
21
|
+
The debugger permits the ability to understand what is going on _inside_ a Ruby program
|
22
|
+
while it executes and offers many of the traditional debugging features such as:
|
28
23
|
|
29
24
|
* Stepping: Running your program one line at a time.
|
30
25
|
* Breaking: Pausing the program at some event or specified instruction, to
|
@@ -34,26 +29,21 @@ and offers many of the traditional debugging features such as:
|
|
34
29
|
* Tracking: Keeping track of the different values of your variables or the
|
35
30
|
different lines executed by your program.
|
36
31
|
|
37
|
-
##
|
38
|
-
|
39
|
-
Linux [![Tra][tra]][tra_url]
|
32
|
+
## For enterprise
|
40
33
|
|
41
|
-
|
34
|
+
Byebug for enterprise is available via the Tidelift Subscription. [Learn
|
35
|
+
more][Tidelift for enterprise].
|
42
36
|
|
43
|
-
|
44
|
-
[vey]: https://ci.appveyor.com/api/projects/status/github/deivid-rodriguez/byebug?svg=true
|
37
|
+
## Build Status
|
45
38
|
|
46
|
-
[
|
47
|
-
[
|
39
|
+

|
40
|
+

|
48
41
|
|
49
42
|
## Requirements
|
50
43
|
|
51
|
-
*
|
52
|
-
|
53
|
-
|
54
|
-
* MRI 2.1.8 or higher.
|
55
|
-
* MRI 2.2.4 or higher.
|
56
|
-
* MRI 2.3.0 or higher.
|
44
|
+
* _Required_: MRI 2.4.0 or higher.
|
45
|
+
* _Recommended_: MRI 2.6.4 or higher (MRI 2.6.0 to 2.6.3 contain a regression
|
46
|
+
causing unbalanced call/return events in some cases, breaking the `next` command).
|
57
47
|
|
58
48
|
## Install
|
59
49
|
|
@@ -61,72 +51,91 @@ Windows [![Vey][vey]][vey_url]
|
|
61
51
|
gem install byebug
|
62
52
|
```
|
63
53
|
|
64
|
-
|
54
|
+
Alternatively, if you use `bundler`:
|
65
55
|
|
66
|
-
|
56
|
+
```shell
|
57
|
+
bundle add byebug --group "development, test"
|
58
|
+
```
|
59
|
+
|
60
|
+
## Usage
|
67
61
|
|
68
|
-
|
62
|
+
### From within the Ruby code
|
69
63
|
|
70
|
-
wherever you want to start debugging and the execution will
|
71
|
-
|
64
|
+
Simply include `byebug` wherever you want to start debugging and the execution will
|
65
|
+
stop there. For example, if you were debugging Rails, you would add `byebug` to
|
66
|
+
your code:
|
72
67
|
|
73
68
|
```ruby
|
74
69
|
def index
|
75
70
|
byebug
|
76
71
|
@articles = Article.find_recent
|
72
|
+
end
|
77
73
|
```
|
78
74
|
|
79
|
-
And then start a Rails server
|
75
|
+
And then start a Rails server:
|
80
76
|
|
81
77
|
```shell
|
82
78
|
bin/rails s
|
83
79
|
```
|
84
80
|
|
85
|
-
Once the execution gets to your `byebug` command you will
|
81
|
+
Once the execution gets to your `byebug` command, you will receive a debugging prompt.
|
82
|
+
|
83
|
+
### From the command line
|
84
|
+
|
85
|
+
If you want to debug a Ruby script without editing it, you can invoke byebug from the command line.
|
86
|
+
|
87
|
+
```shell
|
88
|
+
byebug myscript.rb
|
89
|
+
```
|
86
90
|
|
87
91
|
## Byebug's commands
|
88
92
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
`
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
`
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
`
|
124
|
-
|
125
|
-
`
|
93
|
+
Command | Aliases | Subcommands
|
94
|
+
------- | ------- | -----------
|
95
|
+
`backtrace` | `bt` `w` `where`|
|
96
|
+
`break` | `b` |
|
97
|
+
`catch` | `cat` |
|
98
|
+
`condition` | `cond` |
|
99
|
+
`continue` | `c` `cont` |
|
100
|
+
`continue!` | `c!` `cont!` |
|
101
|
+
`debug` | |
|
102
|
+
`delete` | `del` |
|
103
|
+
`disable` | `dis` | `breakpoints` `display`
|
104
|
+
`display` | `disp` |
|
105
|
+
`down` | |
|
106
|
+
`edit` | `ed` |
|
107
|
+
`enable` | `en` | `breakpoints` `display`
|
108
|
+
`finish` | `fin` |
|
109
|
+
`frame` | `f` |
|
110
|
+
`help` | `h` |
|
111
|
+
`history` | `hist` |
|
112
|
+
`info` | `i` | `args` `breakpoints` `catch` `display` `file` `line` `program`
|
113
|
+
`interrupt` | `int` |
|
114
|
+
`irb` | |
|
115
|
+
`kill` | |
|
116
|
+
`list` | `l` |
|
117
|
+
`method` | `m` | `instance`
|
118
|
+
`next` | `n` |
|
119
|
+
`pry` | |
|
120
|
+
`quit` | `q` |
|
121
|
+
`quit!` | `q!` |
|
122
|
+
`restart` | |
|
123
|
+
`save` | `sa` |
|
124
|
+
`set` | | `autoirb` `autolist` `autopry` `autosave` `basename` `callstyle` `fullpath` `histfile` `histsize` `linetrace` `listsize` `post_mortem` `savefile` `stack_on_error` `width`
|
125
|
+
`show` | | `autoirb` `autolist` `autopry` `autosave` `basename` `callstyle` `fullpath` `histfile` `histsize` `linetrace` `listsize` `post_mortem` `savefile` `stack_on_error` `width`
|
126
|
+
`skip` | `sk` |
|
127
|
+
`source` | `so` |
|
128
|
+
`step` | `s` |
|
129
|
+
`thread` | `th` | `current` `list` `resume` `stop` `switch`
|
130
|
+
`tracevar` | `tr` |
|
131
|
+
`undisplay` | `undisp` |
|
132
|
+
`untracevar`| `untr` |
|
133
|
+
`up` | |
|
134
|
+
`var` | `v` | `all` `constant` `global` `instance` `local`
|
126
135
|
|
127
136
|
## Semantic Versioning
|
128
137
|
|
129
|
-
Byebug
|
138
|
+
Byebug attempts to follow [semantic versioning](https://semver.org) and
|
130
139
|
bump major version only when backwards incompatible changes are released.
|
131
140
|
Backwards compatibility is targeted to [pry-byebug] and any other plugins
|
132
141
|
relying on `byebug`.
|
@@ -145,11 +154,25 @@ started. Proper documentation will be eventually written.
|
|
145
154
|
connected.
|
146
155
|
* [minitest-byebug] starts a byebug session on minitest failures.
|
147
156
|
* [sublime_debugger] provides a plugin for ruby debugging on Sublime Text.
|
157
|
+
* [atom-byebug] provides integration with the Atom editor [EXPERIMENTAL].
|
148
158
|
|
149
159
|
## Contribute
|
150
160
|
|
151
161
|
See [Getting Started with Development](CONTRIBUTING.md).
|
152
162
|
|
163
|
+
## Funding
|
164
|
+
|
165
|
+
Subscribe to [Tidelift][Tidelift support] to ensure byebug stays actively
|
166
|
+
maintained, and at the same time get licensing assurances and timely security
|
167
|
+
notifications for your open source dependencies.
|
168
|
+
|
169
|
+
You can also help `byebug` by leaving a small (or big) tip through [Liberapay].
|
170
|
+
|
171
|
+
## Security contact information
|
172
|
+
|
173
|
+
Please use the Tidelift security contact to [report a security vulnerability].
|
174
|
+
Tidelift will coordinate the fix and disclosure.
|
175
|
+
|
153
176
|
## Credits
|
154
177
|
|
155
178
|
Everybody who has ever contributed to this forked and reforked piece of
|
@@ -168,3 +191,9 @@ software, especially:
|
|
168
191
|
[ruby-debug-passenger]: https://github.com/davejamesmiller/ruby-debug-passenger
|
169
192
|
[minitest-byebug]: https://github.com/kaspth/minitest-byebug
|
170
193
|
[sublime_debugger]: https://github.com/shuky19/sublime_debugger
|
194
|
+
[atom-byebug]: https://github.com/izaera/atom-byebug
|
195
|
+
[Liberapay]: https://liberapay.com/byebug/donate
|
196
|
+
[Tidelift]: https://tidelift.com/subscription/pkg/rubygems-byebug?utm_source=rubygems-byebug&utm_medium=readme_text
|
197
|
+
[Tidelift for enterprise]: https://tidelift.com/subscription/pkg/rubygems-byebug?utm_source=rubygems-byebug&utm_medium=referral&utm_campaign=github&utm_content=enterprise
|
198
|
+
[Tidelift support]: https://tidelift.com/subscription/pkg/rubygems-byebug?utm_source=rubygems-byebug&utm_medium=referral&utm_campaign=github&utm_content=support
|
199
|
+
[report a security vulnerability]: https://tidelift.com/security
|
data/exe/byebug
ADDED
data/ext/byebug/breakpoint.c
CHANGED
@@ -239,7 +239,7 @@ brkpt_source(VALUE self)
|
|
239
239
|
}
|
240
240
|
|
241
241
|
static void
|
242
|
-
mark_breakpoint(breakpoint_t *
|
242
|
+
mark_breakpoint(breakpoint_t *breakpoint)
|
243
243
|
{
|
244
244
|
rb_gc_mark(breakpoint->source);
|
245
245
|
rb_gc_mark(breakpoint->expr);
|
@@ -491,7 +491,7 @@ find_breakpoint_by_method(VALUE breakpoints, VALUE klass, ID mid, VALUE bind,
|
|
491
491
|
}
|
492
492
|
|
493
493
|
void
|
494
|
-
|
494
|
+
Init_byebug_breakpoint(VALUE mByebug)
|
495
495
|
{
|
496
496
|
breakpoint_max = 0;
|
497
497
|
|