byebug 9.1.0 → 10.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|