byebug 9.1.0 → 10.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 +5 -5
- data/CHANGELOG.md +24 -3
- data/CONTRIBUTING.md +39 -18
- data/GUIDE.md +16 -17
- data/README.md +64 -52
- data/exe/byebug +6 -0
- data/ext/byebug/breakpoint.c +1 -1
- data/ext/byebug/byebug.c +16 -16
- data/ext/byebug/byebug.h +40 -26
- data/ext/byebug/context.c +26 -26
- data/ext/byebug/extconf.rb +7 -5
- data/ext/byebug/threads.c +8 -8
- data/lib/byebug.rb +3 -1
- data/lib/byebug/attacher.rb +17 -3
- data/lib/byebug/breakpoint.rb +25 -3
- data/lib/byebug/command.rb +20 -14
- data/lib/byebug/command_list.rb +3 -1
- data/lib/byebug/commands.rb +39 -37
- data/lib/byebug/commands/break.rb +33 -15
- data/lib/byebug/commands/catch.rb +16 -14
- data/lib/byebug/commands/condition.rb +11 -9
- data/lib/byebug/commands/continue.rb +9 -7
- data/lib/byebug/commands/debug.rb +7 -5
- data/lib/byebug/commands/delete.rb +11 -9
- data/lib/byebug/commands/disable.rb +8 -6
- data/lib/byebug/commands/disable/breakpoints.rb +7 -5
- data/lib/byebug/commands/disable/display.rb +7 -5
- data/lib/byebug/commands/display.rb +11 -9
- data/lib/byebug/commands/down.rb +10 -8
- data/lib/byebug/commands/edit.rb +10 -8
- data/lib/byebug/commands/enable.rb +8 -6
- data/lib/byebug/commands/enable/breakpoints.rb +7 -5
- data/lib/byebug/commands/enable/display.rb +7 -5
- data/lib/byebug/commands/finish.rb +8 -6
- 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.rb +11 -9
- data/lib/byebug/commands/info/breakpoints.rb +17 -11
- data/lib/byebug/commands/info/display.rb +16 -7
- data/lib/byebug/commands/info/file.rb +12 -10
- data/lib/byebug/commands/info/line.rb +5 -3
- data/lib/byebug/commands/info/program.rb +8 -6
- data/lib/byebug/commands/interrupt.rb +8 -4
- data/lib/byebug/commands/irb.rb +9 -7
- data/lib/byebug/commands/kill.rb +9 -7
- 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 -8
- data/lib/byebug/commands/quit.rb +7 -5
- data/lib/byebug/commands/restart.rb +13 -11
- data/lib/byebug/commands/save.rb +9 -7
- data/lib/byebug/commands/set.rb +12 -10
- data/lib/byebug/commands/show.rb +7 -5
- data/lib/byebug/commands/source.rb +7 -5
- data/lib/byebug/commands/step.rb +8 -6
- data/lib/byebug/commands/thread.rb +11 -9
- 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 -5
- data/lib/byebug/commands/thread/stop.rb +6 -4
- data/lib/byebug/commands/thread/switch.rb +6 -4
- data/lib/byebug/commands/tracevar.rb +10 -8
- data/lib/byebug/commands/undisplay.rb +10 -8
- data/lib/byebug/commands/untracevar.rb +8 -6
- data/lib/byebug/commands/up.rb +10 -8
- data/lib/byebug/commands/var.rb +12 -10
- 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 -7
- 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/where.rb +9 -7
- data/lib/byebug/context.rb +7 -5
- data/lib/byebug/core.rb +25 -25
- data/lib/byebug/errors.rb +4 -2
- data/lib/byebug/frame.rb +16 -16
- data/lib/byebug/helpers/bin.rb +28 -7
- data/lib/byebug/helpers/eval.rb +8 -6
- data/lib/byebug/helpers/file.rb +4 -2
- data/lib/byebug/helpers/frame.rb +5 -3
- data/lib/byebug/helpers/parse.rb +5 -3
- data/lib/byebug/helpers/path.rb +7 -5
- data/lib/byebug/helpers/reflection.rb +2 -0
- data/lib/byebug/helpers/string.rb +4 -2
- data/lib/byebug/helpers/thread.rb +10 -8
- data/lib/byebug/helpers/toggle.rb +10 -8
- data/lib/byebug/helpers/var.rb +8 -6
- data/lib/byebug/history.rb +7 -5
- data/lib/byebug/interface.rb +13 -11
- data/lib/byebug/interfaces/local_interface.rb +4 -4
- data/lib/byebug/interfaces/remote_interface.rb +21 -9
- data/lib/byebug/interfaces/script_interface.rb +2 -0
- data/lib/byebug/interfaces/test_interface.rb +5 -3
- data/lib/byebug/option_setter.rb +14 -12
- data/lib/byebug/printers/base.rb +6 -6
- data/lib/byebug/printers/plain.rb +8 -6
- data/lib/byebug/printers/texts/base.yml +3 -3
- 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.rb +45 -65
- data/lib/byebug/remote/client.rb +55 -0
- data/lib/byebug/remote/server.rb +47 -0
- data/lib/byebug/runner.rb +26 -19
- data/lib/byebug/setting.rb +10 -4
- data/lib/byebug/settings/autoirb.rb +5 -3
- data/lib/byebug/settings/autolist.rb +5 -3
- data/lib/byebug/settings/autopry.rb +5 -3
- data/lib/byebug/settings/autosave.rb +4 -2
- data/lib/byebug/settings/basename.rb +4 -2
- data/lib/byebug/settings/callstyle.rb +3 -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 +4 -2
- data/lib/byebug/settings/listsize.rb +4 -2
- data/lib/byebug/settings/post_mortem.rb +4 -2
- 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 +1 -1
- metadata +8 -5
- data/bin/byebug +0 -9
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "byebug/command"
|
4
|
+
require "byebug/helpers/parse"
|
3
5
|
|
4
6
|
module Byebug
|
5
7
|
#
|
@@ -16,25 +18,25 @@ module Byebug
|
|
16
18
|
end
|
17
19
|
|
18
20
|
def self.description
|
19
|
-
<<-
|
21
|
+
<<-DESCRIPTION
|
20
22
|
c[ont[inue]][ <line_number>]
|
21
23
|
|
22
24
|
#{short_description}
|
23
|
-
|
25
|
+
DESCRIPTION
|
24
26
|
end
|
25
27
|
|
26
28
|
def self.short_description
|
27
|
-
|
29
|
+
"Runs until program ends, hits a breakpoint or reaches a line"
|
28
30
|
end
|
29
31
|
|
30
32
|
def execute
|
31
33
|
if @match[1]
|
32
|
-
num, err = get_int(@match[1],
|
34
|
+
num, err = get_int(@match[1], "Continue", 0, nil)
|
33
35
|
return errmsg(err) unless num
|
34
36
|
|
35
37
|
filename = File.expand_path(frame.file)
|
36
38
|
unless Breakpoint.potential_line?(filename, num)
|
37
|
-
return errmsg(pr(
|
39
|
+
return errmsg(pr("continue.errors.unstopped_line", line: num))
|
38
40
|
end
|
39
41
|
|
40
42
|
Breakpoint.add(filename, num)
|
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "byebug/command"
|
4
|
+
require "byebug/helpers/eval"
|
3
5
|
|
4
6
|
module Byebug
|
5
7
|
#
|
@@ -13,18 +15,18 @@ module Byebug
|
|
13
15
|
end
|
14
16
|
|
15
17
|
def self.description
|
16
|
-
<<-
|
18
|
+
<<-DESCRIPTION
|
17
19
|
debug <expression>
|
18
20
|
|
19
21
|
#{short_description}
|
20
22
|
|
21
23
|
Allows, for example, setting breakpoints on expressions evaluated from
|
22
24
|
the debugger's prompt.
|
23
|
-
|
25
|
+
DESCRIPTION
|
24
26
|
end
|
25
27
|
|
26
28
|
def self.short_description
|
27
|
-
|
29
|
+
"Spawns a subdebugger"
|
28
30
|
end
|
29
31
|
|
30
32
|
def execute
|
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "byebug/command"
|
4
|
+
require "byebug/helpers/parse"
|
3
5
|
|
4
6
|
module Byebug
|
5
7
|
#
|
@@ -16,23 +18,23 @@ module Byebug
|
|
16
18
|
end
|
17
19
|
|
18
20
|
def self.description
|
19
|
-
<<-
|
21
|
+
<<-DESCRIPTION
|
20
22
|
del[ete][ nnn...]
|
21
23
|
|
22
24
|
#{short_description}
|
23
25
|
|
24
26
|
Without and argument, deletes all breakpoints. With integer arguments,
|
25
27
|
it deletes specific breakpoints.
|
26
|
-
|
28
|
+
DESCRIPTION
|
27
29
|
end
|
28
30
|
|
29
31
|
def self.short_description
|
30
|
-
|
32
|
+
"Deletes breakpoints"
|
31
33
|
end
|
32
34
|
|
33
35
|
def execute
|
34
36
|
unless @match[1]
|
35
|
-
if confirm(pr(
|
37
|
+
if confirm(pr("break.confirmations.delete_all"))
|
36
38
|
Byebug.breakpoints.clear
|
37
39
|
end
|
38
40
|
|
@@ -40,14 +42,14 @@ module Byebug
|
|
40
42
|
end
|
41
43
|
|
42
44
|
@match[1].split(/ +/).each do |number|
|
43
|
-
pos, err = get_int(number,
|
45
|
+
pos, err = get_int(number, "Delete", 1)
|
44
46
|
|
45
47
|
return errmsg(err) unless pos
|
46
48
|
|
47
49
|
if Breakpoint.remove(pos)
|
48
|
-
puts(pr(
|
50
|
+
puts(pr("break.messages.breakpoint_deleted", pos: pos))
|
49
51
|
else
|
50
|
-
errmsg(pr(
|
52
|
+
errmsg(pr("break.errors.no_breakpoint_delete", pos: pos))
|
51
53
|
end
|
52
54
|
end
|
53
55
|
end
|
@@ -1,7 +1,9 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
|
3
|
+
require "byebug/subcommands"
|
4
|
+
|
5
|
+
require "byebug/commands/disable/breakpoints"
|
6
|
+
require "byebug/commands/disable/display"
|
5
7
|
|
6
8
|
module Byebug
|
7
9
|
#
|
@@ -17,15 +19,15 @@ module Byebug
|
|
17
19
|
end
|
18
20
|
|
19
21
|
def self.description
|
20
|
-
<<-
|
22
|
+
<<-DESCRIPTION
|
21
23
|
dis[able][[ breakpoints| display)][ n1[ n2[ ...[ nn]]]]]
|
22
24
|
|
23
25
|
#{short_description}
|
24
|
-
|
26
|
+
DESCRIPTION
|
25
27
|
end
|
26
28
|
|
27
29
|
def self.short_description
|
28
|
-
|
30
|
+
"Disables breakpoints or displays"
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "byebug/helpers/toggle"
|
2
4
|
|
3
5
|
module Byebug
|
4
6
|
#
|
@@ -18,22 +20,22 @@ module Byebug
|
|
18
20
|
end
|
19
21
|
|
20
22
|
def self.description
|
21
|
-
<<-
|
23
|
+
<<-DESCRIPTION
|
22
24
|
dis[able] b[reakpoints][ <id1> <id2> .. <idn>]
|
23
25
|
|
24
26
|
#{short_description}
|
25
27
|
|
26
28
|
Give breakpoint numbers (separated by spaces) as arguments or no
|
27
29
|
argument at all if you want to disable every breakpoint.
|
28
|
-
|
30
|
+
DESCRIPTION
|
29
31
|
end
|
30
32
|
|
31
33
|
def self.short_description
|
32
|
-
|
34
|
+
"Disable all or specific breakpoints."
|
33
35
|
end
|
34
36
|
|
35
37
|
def execute
|
36
|
-
enable_disable_breakpoints(
|
38
|
+
enable_disable_breakpoints("disable", @match[1])
|
37
39
|
end
|
38
40
|
end
|
39
41
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "byebug/helpers/toggle"
|
2
4
|
|
3
5
|
module Byebug
|
4
6
|
#
|
@@ -18,7 +20,7 @@ module Byebug
|
|
18
20
|
end
|
19
21
|
|
20
22
|
def self.description
|
21
|
-
<<-
|
23
|
+
<<-DESCRIPTION
|
22
24
|
dis[able] d[isplay][ <id1> <id2> .. <idn>]
|
23
25
|
|
24
26
|
#{short_description}
|
@@ -26,15 +28,15 @@ module Byebug
|
|
26
28
|
Arguments are the code numbers of the expressions to disable. Do "info
|
27
29
|
display" to see the current list of code numbers. If no arguments are
|
28
30
|
specified, all displays are disabled.
|
29
|
-
|
31
|
+
DESCRIPTION
|
30
32
|
end
|
31
33
|
|
32
34
|
def self.short_description
|
33
|
-
|
35
|
+
"Disables expressions to be displayed when program stops."
|
34
36
|
end
|
35
37
|
|
36
38
|
def execute
|
37
|
-
enable_disable_display(
|
39
|
+
enable_disable_display("disable", @match[1])
|
38
40
|
end
|
39
41
|
end
|
40
42
|
end
|
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "byebug/command"
|
4
|
+
require "byebug/helpers/eval"
|
3
5
|
|
4
6
|
module Byebug
|
5
7
|
#
|
@@ -16,18 +18,18 @@ module Byebug
|
|
16
18
|
end
|
17
19
|
|
18
20
|
def self.description
|
19
|
-
<<-
|
21
|
+
<<-DESCRIPTION
|
20
22
|
disp[lay][ <expression>]
|
21
23
|
|
22
24
|
#{short_description}
|
23
25
|
|
24
26
|
If <expression> specified, adds <expression> into display expression
|
25
27
|
list. Otherwise, it lists all expressions.
|
26
|
-
|
28
|
+
DESCRIPTION
|
27
29
|
end
|
28
30
|
|
29
31
|
def self.short_description
|
30
|
-
|
32
|
+
"Evaluates expressions every time the debugger stops"
|
31
33
|
end
|
32
34
|
|
33
35
|
def execute
|
@@ -40,13 +42,13 @@ module Byebug
|
|
40
42
|
private
|
41
43
|
|
42
44
|
def display_expression(exp)
|
43
|
-
print pr(
|
45
|
+
print pr("display.result", n: Byebug.displays.size,
|
44
46
|
exp: exp,
|
45
47
|
result: eval_expr(exp))
|
46
48
|
end
|
47
49
|
|
48
50
|
def print_display_expressions
|
49
|
-
result = prc(
|
51
|
+
result = prc("display.result", Byebug.displays) do |item, index|
|
50
52
|
active, exp = item
|
51
53
|
|
52
54
|
{ n: index + 1, exp: exp, result: eval_expr(exp) } if active
|
@@ -57,8 +59,8 @@ module Byebug
|
|
57
59
|
|
58
60
|
def eval_expr(expression)
|
59
61
|
error_eval(expression).inspect
|
60
|
-
rescue
|
61
|
-
|
62
|
+
rescue StandardError
|
63
|
+
"(undefined)"
|
62
64
|
end
|
63
65
|
end
|
64
66
|
end
|
data/lib/byebug/commands/down.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pathname"
|
4
|
+
require "byebug/command"
|
5
|
+
require "byebug/helpers/frame"
|
6
|
+
require "byebug/helpers/parse"
|
5
7
|
|
6
8
|
module Byebug
|
7
9
|
#
|
@@ -18,21 +20,21 @@ module Byebug
|
|
18
20
|
end
|
19
21
|
|
20
22
|
def self.description
|
21
|
-
<<-
|
23
|
+
<<-DESCRIPTION
|
22
24
|
down[ count]
|
23
25
|
|
24
26
|
#{short_description}
|
25
27
|
|
26
28
|
Use the "bt" command to find out where you want to go.
|
27
|
-
|
29
|
+
DESCRIPTION
|
28
30
|
end
|
29
31
|
|
30
32
|
def self.short_description
|
31
|
-
|
33
|
+
"Moves to a lower frame in the stack trace"
|
32
34
|
end
|
33
35
|
|
34
36
|
def execute
|
35
|
-
pos, err = parse_steps(@match[1],
|
37
|
+
pos, err = parse_steps(@match[1], "Down")
|
36
38
|
return errmsg(err) unless pos
|
37
39
|
|
38
40
|
jump_frames(-pos)
|
data/lib/byebug/commands/edit.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "byebug/command"
|
2
4
|
|
3
5
|
module Byebug
|
4
6
|
#
|
@@ -13,7 +15,7 @@ module Byebug
|
|
13
15
|
end
|
14
16
|
|
15
17
|
def self.description
|
16
|
-
<<-
|
18
|
+
<<-DESCRIPTION
|
17
19
|
edit[ file:lineno]
|
18
20
|
|
19
21
|
#{short_description}
|
@@ -21,17 +23,17 @@ module Byebug
|
|
21
23
|
With no argumnt, edits file containing most re line listed. Editing
|
22
24
|
targets can also be specified to start editing at a specific line in a
|
23
25
|
specific file
|
24
|
-
|
26
|
+
DESCRIPTION
|
25
27
|
end
|
26
28
|
|
27
29
|
def self.short_description
|
28
|
-
|
30
|
+
"Edits source files"
|
29
31
|
end
|
30
32
|
|
31
33
|
def execute
|
32
34
|
file, line = location(@match[1])
|
33
|
-
return edit_error(
|
34
|
-
return edit_error(
|
35
|
+
return edit_error("not_exist", file) unless File.exist?(file)
|
36
|
+
return edit_error("not_readable", file) unless File.readable?(file)
|
35
37
|
|
36
38
|
cmd = line ? "#{editor} +#{line} #{file}" : "#{editor} #{file}"
|
37
39
|
|
@@ -43,7 +45,7 @@ module Byebug
|
|
43
45
|
def location(matched)
|
44
46
|
if matched.nil?
|
45
47
|
file = frame.file
|
46
|
-
return errmsg(pr(
|
48
|
+
return errmsg(pr("edit.errors.state")) unless file
|
47
49
|
line = frame.line
|
48
50
|
elsif (@pos_match = /([^:]+)[:]([0-9]+)/.match(matched))
|
49
51
|
file, line = @pos_match.captures
|
@@ -56,7 +58,7 @@ module Byebug
|
|
56
58
|
end
|
57
59
|
|
58
60
|
def editor
|
59
|
-
ENV[
|
61
|
+
ENV["EDITOR"] || "vim"
|
60
62
|
end
|
61
63
|
|
62
64
|
def edit_error(type, file)
|
@@ -1,7 +1,9 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
|
3
|
+
require "byebug/subcommands"
|
4
|
+
|
5
|
+
require "byebug/commands/enable/breakpoints"
|
6
|
+
require "byebug/commands/enable/display"
|
5
7
|
|
6
8
|
module Byebug
|
7
9
|
#
|
@@ -17,15 +19,15 @@ module Byebug
|
|
17
19
|
end
|
18
20
|
|
19
21
|
def self.description
|
20
|
-
<<-
|
22
|
+
<<-DESCRIPTION
|
21
23
|
en[able][[ b[reakpoints]| d[isplay])][ n1[ n2[ ...[ nn]]]]]
|
22
24
|
|
23
25
|
#{short_description}
|
24
|
-
|
26
|
+
DESCRIPTION
|
25
27
|
end
|
26
28
|
|
27
29
|
def self.short_description
|
28
|
-
|
30
|
+
"Enables breakpoints or displays"
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "byebug/helpers/toggle"
|
2
4
|
|
3
5
|
module Byebug
|
4
6
|
#
|
@@ -18,22 +20,22 @@ module Byebug
|
|
18
20
|
end
|
19
21
|
|
20
22
|
def self.description
|
21
|
-
<<-
|
23
|
+
<<-DESCRIPTION
|
22
24
|
en[able] b[reakpoints][ <ids>]
|
23
25
|
|
24
26
|
#{short_description}
|
25
27
|
|
26
28
|
Give breakpoint numbers (separated by spaces) as arguments or no
|
27
29
|
argument at all if you want to enable every breakpoint.
|
28
|
-
|
30
|
+
DESCRIPTION
|
29
31
|
end
|
30
32
|
|
31
33
|
def self.short_description
|
32
|
-
|
34
|
+
"Enable all or specific breakpoints"
|
33
35
|
end
|
34
36
|
|
35
37
|
def execute
|
36
|
-
enable_disable_breakpoints(
|
38
|
+
enable_disable_breakpoints("enable", @match[1])
|
37
39
|
end
|
38
40
|
end
|
39
41
|
end
|