byebug 10.0.2 → 11.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +365 -287
  3. data/CONTRIBUTING.md +6 -34
  4. data/GUIDE.md +9 -8
  5. data/LICENSE +18 -18
  6. data/README.md +83 -79
  7. data/ext/byebug/byebug.c +4 -9
  8. data/ext/byebug/byebug.h +4 -2
  9. data/ext/byebug/context.c +15 -2
  10. data/lib/byebug.rb +1 -1
  11. data/lib/byebug/attacher.rb +4 -4
  12. data/lib/byebug/command.rb +2 -2
  13. data/lib/byebug/command_list.rb +1 -1
  14. data/lib/byebug/commands.rb +38 -37
  15. data/lib/byebug/commands/break.rb +10 -14
  16. data/lib/byebug/commands/catch.rb +4 -8
  17. data/lib/byebug/commands/condition.rb +3 -5
  18. data/lib/byebug/commands/continue.rb +27 -9
  19. data/lib/byebug/commands/debug.rb +2 -2
  20. data/lib/byebug/commands/delete.rb +3 -5
  21. data/lib/byebug/commands/disable.rb +4 -4
  22. data/lib/byebug/commands/disable/breakpoints.rb +1 -1
  23. data/lib/byebug/commands/disable/display.rb +1 -1
  24. data/lib/byebug/commands/display.rb +2 -2
  25. data/lib/byebug/commands/down.rb +3 -3
  26. data/lib/byebug/commands/edit.rb +2 -1
  27. data/lib/byebug/commands/enable.rb +3 -3
  28. data/lib/byebug/commands/enable/breakpoints.rb +1 -1
  29. data/lib/byebug/commands/enable/display.rb +1 -1
  30. data/lib/byebug/commands/finish.rb +2 -2
  31. data/lib/byebug/commands/frame.rb +3 -3
  32. data/lib/byebug/commands/help.rb +2 -2
  33. data/lib/byebug/commands/history.rb +2 -2
  34. data/lib/byebug/commands/info.rb +6 -6
  35. data/lib/byebug/commands/info/breakpoints.rb +2 -4
  36. data/lib/byebug/commands/info/display.rb +1 -3
  37. data/lib/byebug/commands/info/file.rb +2 -4
  38. data/lib/byebug/commands/interrupt.rb +1 -1
  39. data/lib/byebug/commands/irb.rb +2 -4
  40. data/lib/byebug/commands/kill.rb +3 -5
  41. data/lib/byebug/commands/list.rb +4 -4
  42. data/lib/byebug/commands/method.rb +2 -2
  43. data/lib/byebug/commands/next.rb +2 -2
  44. data/lib/byebug/commands/pry.rb +3 -5
  45. data/lib/byebug/commands/quit.rb +4 -4
  46. data/lib/byebug/commands/restart.rb +3 -3
  47. data/lib/byebug/commands/save.rb +1 -1
  48. data/lib/byebug/commands/set.rb +3 -3
  49. data/lib/byebug/commands/show.rb +1 -1
  50. data/lib/byebug/commands/skip.rb +85 -0
  51. data/lib/byebug/commands/source.rb +2 -4
  52. data/lib/byebug/commands/step.rb +2 -2
  53. data/lib/byebug/commands/thread.rb +6 -6
  54. data/lib/byebug/commands/thread/current.rb +1 -1
  55. data/lib/byebug/commands/thread/list.rb +1 -1
  56. data/lib/byebug/commands/thread/resume.rb +2 -4
  57. data/lib/byebug/commands/thread/stop.rb +1 -1
  58. data/lib/byebug/commands/thread/switch.rb +1 -1
  59. data/lib/byebug/commands/tracevar.rb +2 -5
  60. data/lib/byebug/commands/undisplay.rb +5 -6
  61. data/lib/byebug/commands/untracevar.rb +1 -1
  62. data/lib/byebug/commands/up.rb +3 -3
  63. data/lib/byebug/commands/var.rb +8 -8
  64. data/lib/byebug/commands/var/all.rb +1 -1
  65. data/lib/byebug/commands/var/args.rb +1 -1
  66. data/lib/byebug/commands/var/const.rb +2 -4
  67. data/lib/byebug/commands/var/instance.rb +1 -1
  68. data/lib/byebug/commands/var/local.rb +1 -1
  69. data/lib/byebug/commands/where.rb +2 -2
  70. data/lib/byebug/context.rb +4 -4
  71. data/lib/byebug/core.rb +10 -9
  72. data/lib/byebug/frame.rb +2 -2
  73. data/lib/byebug/helpers/frame.rb +1 -1
  74. data/lib/byebug/helpers/parse.rb +1 -3
  75. data/lib/byebug/helpers/string.rb +0 -3
  76. data/lib/byebug/helpers/toggle.rb +2 -4
  77. data/lib/byebug/helpers/var.rb +1 -1
  78. data/lib/byebug/history.rb +1 -1
  79. data/lib/byebug/interface.rb +6 -6
  80. data/lib/byebug/interfaces/local_interface.rb +21 -2
  81. data/lib/byebug/interfaces/remote_interface.rb +1 -1
  82. data/lib/byebug/interfaces/script_interface.rb +2 -1
  83. data/lib/byebug/printers/base.rb +4 -5
  84. data/lib/byebug/printers/plain.rb +1 -1
  85. data/lib/byebug/processors/command_processor.rb +2 -2
  86. data/lib/byebug/processors/control_processor.rb +1 -1
  87. data/lib/byebug/processors/post_mortem_processor.rb +1 -1
  88. data/lib/byebug/processors/script_processor.rb +1 -1
  89. data/lib/byebug/remote.rb +3 -3
  90. data/lib/byebug/remote/client.rb +2 -0
  91. data/lib/byebug/runner.rb +7 -7
  92. data/lib/byebug/setting.rb +2 -2
  93. data/lib/byebug/settings/autoirb.rb +2 -2
  94. data/lib/byebug/settings/autolist.rb +2 -2
  95. data/lib/byebug/settings/autopry.rb +2 -2
  96. data/lib/byebug/settings/autosave.rb +1 -1
  97. data/lib/byebug/settings/basename.rb +1 -1
  98. data/lib/byebug/settings/callstyle.rb +2 -2
  99. data/lib/byebug/settings/fullpath.rb +1 -1
  100. data/lib/byebug/settings/histfile.rb +1 -1
  101. data/lib/byebug/settings/histsize.rb +1 -1
  102. data/lib/byebug/settings/linetrace.rb +1 -1
  103. data/lib/byebug/settings/listsize.rb +1 -1
  104. data/lib/byebug/settings/post_mortem.rb +1 -1
  105. data/lib/byebug/settings/savefile.rb +1 -1
  106. data/lib/byebug/settings/stack_on_error.rb +1 -1
  107. data/lib/byebug/settings/width.rb +1 -1
  108. data/lib/byebug/source_file_formatter.rb +2 -2
  109. data/lib/byebug/subcommands.rb +2 -2
  110. data/lib/byebug/version.rb +1 -1
  111. metadata +9 -9
data/lib/byebug.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/attacher"
3
+ require_relative "byebug/attacher"
@@ -8,8 +8,6 @@ module Byebug
8
8
  # Starts byebug, and stops at the first line of user's code.
9
9
  #
10
10
  def self.attach
11
- require "byebug/core"
12
-
13
11
  unless started?
14
12
  self.mode = :attached
15
13
 
@@ -21,7 +19,7 @@ module Byebug
21
19
  end
22
20
 
23
21
  def self.spawn(host = "localhost", port = nil)
24
- require "byebug/core"
22
+ require_relative "core"
25
23
 
26
24
  self.wait_connection = true
27
25
  start_server(host, port || PORT)
@@ -35,7 +33,9 @@ end
35
33
  #
36
34
  module Kernel
37
35
  def byebug
38
- Byebug.attach
36
+ require_relative "core"
37
+
38
+ Byebug.attach unless Byebug.mode == :off
39
39
  end
40
40
 
41
41
  def remote_byebug(host = "localhost", port = nil)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "forwardable"
4
- require "byebug/helpers/string"
4
+ require_relative "helpers/string"
5
5
 
6
6
  module Byebug
7
7
  #
@@ -80,7 +80,7 @@ module Byebug
80
80
  def to_s
81
81
  name
82
82
  .split("::")
83
- .map { |n| n.gsub(/Command$/, "").downcase if n =~ /Command$/ }
83
+ .map { |n| n.gsub(/Command$/, "").downcase if /Command$/.match?(n) }
84
84
  .compact
85
85
  .join(" ")
86
86
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/errors"
3
+ require_relative "errors"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,39 +1,40 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/commands/break"
4
- require "byebug/commands/catch"
5
- require "byebug/commands/condition"
6
- require "byebug/commands/continue"
7
- require "byebug/commands/debug"
8
- require "byebug/commands/delete"
9
- require "byebug/commands/disable"
10
- require "byebug/commands/display"
11
- require "byebug/commands/down"
12
- require "byebug/commands/edit"
13
- require "byebug/commands/enable"
14
- require "byebug/commands/finish"
15
- require "byebug/commands/frame"
16
- require "byebug/commands/help"
17
- require "byebug/commands/history"
18
- require "byebug/commands/info"
19
- require "byebug/commands/interrupt"
20
- require "byebug/commands/irb"
21
- require "byebug/commands/kill"
22
- require "byebug/commands/list"
23
- require "byebug/commands/method"
24
- require "byebug/commands/next"
25
- require "byebug/commands/pry"
26
- require "byebug/commands/quit"
27
- require "byebug/commands/restart"
28
- require "byebug/commands/save"
29
- require "byebug/commands/set"
30
- require "byebug/commands/show"
31
- require "byebug/commands/source"
32
- require "byebug/commands/step"
33
- require "byebug/commands/thread"
34
- require "byebug/commands/tracevar"
35
- require "byebug/commands/undisplay"
36
- require "byebug/commands/untracevar"
37
- require "byebug/commands/up"
38
- require "byebug/commands/var"
39
- require "byebug/commands/where"
3
+ require_relative "commands/break"
4
+ require_relative "commands/catch"
5
+ require_relative "commands/condition"
6
+ require_relative "commands/continue"
7
+ require_relative "commands/debug"
8
+ require_relative "commands/delete"
9
+ require_relative "commands/disable"
10
+ require_relative "commands/display"
11
+ require_relative "commands/down"
12
+ require_relative "commands/edit"
13
+ require_relative "commands/enable"
14
+ require_relative "commands/finish"
15
+ require_relative "commands/frame"
16
+ require_relative "commands/help"
17
+ require_relative "commands/history"
18
+ require_relative "commands/info"
19
+ require_relative "commands/interrupt"
20
+ require_relative "commands/irb"
21
+ require_relative "commands/kill"
22
+ require_relative "commands/list"
23
+ require_relative "commands/method"
24
+ require_relative "commands/next"
25
+ require_relative "commands/pry"
26
+ require_relative "commands/quit"
27
+ require_relative "commands/restart"
28
+ require_relative "commands/save"
29
+ require_relative "commands/set"
30
+ require_relative "commands/show"
31
+ require_relative "commands/skip"
32
+ require_relative "commands/source"
33
+ require_relative "commands/step"
34
+ require_relative "commands/thread"
35
+ require_relative "commands/tracevar"
36
+ require_relative "commands/undisplay"
37
+ require_relative "commands/untracevar"
38
+ require_relative "commands/up"
39
+ require_relative "commands/var"
40
+ require_relative "commands/where"
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/command"
4
- require "byebug/helpers/eval"
5
- require "byebug/helpers/file"
6
- require "byebug/helpers/parse"
7
- require "byebug/source_file_formatter"
3
+ require_relative "../command"
4
+ require_relative "../helpers/eval"
5
+ require_relative "../helpers/file"
6
+ require_relative "../helpers/parse"
7
+ require_relative "../source_file_formatter"
8
8
 
9
9
  module Byebug
10
10
  #
@@ -23,8 +23,8 @@ module Byebug
23
23
 
24
24
  def self.description
25
25
  <<-DESCRIPTION
26
- b[reak] [file:]line [if expr]
27
- b[reak] [module::...]class(.|#)method [if expr]
26
+ b[reak] [<file>:]<line> [if <expr>]
27
+ b[reak] [<module>::...]<class>(.|#)<method> [if <expr>]
28
28
 
29
29
  They can be specified by line or method and an expression can be added
30
30
  for conditionally enabled breakpoints.
@@ -43,9 +43,7 @@ module Byebug
43
43
  b = line_breakpoint(@match[1]) || method_breakpoint(@match[1])
44
44
  return errmsg(pr("break.errors.location")) unless b
45
45
 
46
- if syntax_valid?(@match[2])
47
- return puts(pr("break.created", id: b.id, file: b.source, line: b.pos))
48
- end
46
+ return puts(pr("break.created", id: b.id, file: b.source, line: b.pos)) if syntax_valid?(@match[2])
49
47
 
50
48
  errmsg(pr("break.errors.expression", expr: @match[2]))
51
49
  b.enabled = false
@@ -76,7 +74,7 @@ module Byebug
76
74
  def target_object(str)
77
75
  k = error_eval(str)
78
76
 
79
- k && k.is_a?(Module) ? k.name : str
77
+ k&.is_a?(Module) ? k.name : str
80
78
  rescue StandardError
81
79
  errmsg("Warning: breakpoint source is not yet defined")
82
80
  str
@@ -87,9 +85,7 @@ module Byebug
87
85
 
88
86
  fullpath = File.realpath(file)
89
87
 
90
- if line > n_lines(file)
91
- raise(pr("break.errors.far_line", lines: n_lines(file), file: fullpath))
92
- end
88
+ raise(pr("break.errors.far_line", lines: n_lines(file), file: fullpath)) if line > n_lines(file)
93
89
 
94
90
  unless Breakpoint.potential_line?(fullpath, line)
95
91
  msg = pr(
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/command"
4
- require "byebug/helpers/eval"
3
+ require_relative "../command"
4
+ require_relative "../helpers/eval"
5
5
 
6
6
  module Byebug
7
7
  #
@@ -48,18 +48,14 @@ module Byebug
48
48
  private
49
49
 
50
50
  def remove(exception)
51
- unless Byebug.catchpoints.member?(exception)
52
- return errmsg pr("catch.errors.not_found", exception: exception)
53
- end
51
+ return errmsg pr("catch.errors.not_found", exception: exception) unless Byebug.catchpoints.member?(exception)
54
52
 
55
53
  puts pr("catch.removed", exception: exception)
56
54
  Byebug.catchpoints.delete(exception)
57
55
  end
58
56
 
59
57
  def add(exception)
60
- if warning_eval(exception.is_a?(Class).to_s)
61
- errmsg pr("catch.errors.not_class", class: exception)
62
- end
58
+ errmsg pr("catch.errors.not_class", class: exception) if warning_eval(exception.is_a?(Class).to_s)
63
59
 
64
60
  puts pr("catch.added", exception: exception)
65
61
  Byebug.add_catchpoint(exception)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/command"
4
- require "byebug/helpers/parse"
3
+ require_relative "../command"
4
+ require_relative "../helpers/parse"
5
5
 
6
6
  module Byebug
7
7
  #
@@ -47,9 +47,7 @@ module Byebug
47
47
  breakpoint = breakpoints.find { |b| b.id == pos }
48
48
  return errmsg(pr("break.errors.no_breakpoint")) unless breakpoint
49
49
 
50
- unless syntax_valid?(@match[2])
51
- return errmsg(pr("break.errors.not_changed", expr: @match[2]))
52
- end
50
+ return errmsg(pr("break.errors.not_changed", expr: @match[2])) unless syntax_valid?(@match[2])
53
51
 
54
52
  breakpoint.expr = @match[2]
55
53
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/command"
4
- require "byebug/helpers/parse"
3
+ require_relative "../command"
4
+ require_relative "../helpers/parse"
5
5
 
6
6
  module Byebug
7
7
  #
@@ -14,7 +14,7 @@ module Byebug
14
14
  include Helpers::ParseHelper
15
15
 
16
16
  def self.regexp
17
- /^\s* c(?:ont(?:inue)?)? (?:\s+(\S+))? \s*$/x
17
+ /^\s* c(?:ont(?:inue)?)? (?:(!|\s+unconditionally|\s+\S+))? \s*$/x
18
18
  end
19
19
 
20
20
  def self.description
@@ -22,6 +22,11 @@ module Byebug
22
22
  c[ont[inue]][ <line_number>]
23
23
 
24
24
  #{short_description}
25
+
26
+ Normally the program stops at the next breakpoint. However, if the
27
+ parameter "unconditionally" is given or the command is suffixed with
28
+ "!", the program will run until the end regardless of any enabled
29
+ breakpoints.
25
30
  DESCRIPTION
26
31
  end
27
32
 
@@ -30,21 +35,34 @@ module Byebug
30
35
  end
31
36
 
32
37
  def execute
33
- if @match[1]
34
- num, err = get_int(@match[1], "Continue", 0, nil)
38
+ if until_line?
39
+ num, err = get_int(modifier, "Continue", 0, nil)
35
40
  return errmsg(err) unless num
36
41
 
37
42
  filename = File.expand_path(frame.file)
38
- unless Breakpoint.potential_line?(filename, num)
39
- return errmsg(pr("continue.errors.unstopped_line", line: num))
40
- end
43
+ return errmsg(pr("continue.errors.unstopped_line", line: num)) unless Breakpoint.potential_line?(filename, num)
41
44
 
42
45
  Breakpoint.add(filename, num)
43
46
  end
44
47
 
45
48
  processor.proceed!
46
49
 
47
- Byebug.stop if Byebug.stoppable?
50
+ Byebug.mode = :off if unconditionally?
51
+ Byebug.stop if unconditionally? || Byebug.stoppable?
52
+ end
53
+
54
+ private
55
+
56
+ def until_line?
57
+ @match[1] && !["!", "unconditionally"].include?(modifier)
58
+ end
59
+
60
+ def unconditionally?
61
+ @match[1] && ["!", "unconditionally"].include?(modifier)
62
+ end
63
+
64
+ def modifier
65
+ @match[1].lstrip
48
66
  end
49
67
  end
50
68
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/command"
4
- require "byebug/helpers/eval"
3
+ require_relative "../command"
4
+ require_relative "../helpers/eval"
5
5
 
6
6
  module Byebug
7
7
  #
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/command"
4
- require "byebug/helpers/parse"
3
+ require_relative "../command"
4
+ require_relative "../helpers/parse"
5
5
 
6
6
  module Byebug
7
7
  #
@@ -34,9 +34,7 @@ module Byebug
34
34
 
35
35
  def execute
36
36
  unless @match[1]
37
- if confirm(pr("break.confirmations.delete_all"))
38
- Byebug.breakpoints.clear
39
- end
37
+ Byebug.breakpoints.clear if confirm(pr("break.confirmations.delete_all"))
40
38
 
41
39
  return
42
40
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/subcommands"
3
+ require_relative "../subcommands"
4
4
 
5
- require "byebug/commands/disable/breakpoints"
6
- require "byebug/commands/disable/display"
5
+ require_relative "../commands/disable/breakpoints"
6
+ require_relative "../commands/disable/display"
7
7
 
8
8
  module Byebug
9
9
  #
@@ -23,7 +23,7 @@ module Byebug
23
23
  dis[able][[ breakpoints| display)][ n1[ n2[ ...[ nn]]]]]
24
24
 
25
25
  #{short_description}
26
- DESCRIPTION
26
+ DESCRIPTION
27
27
  end
28
28
 
29
29
  def self.short_description
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/toggle"
3
+ require_relative "../../helpers/toggle"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/toggle"
3
+ require_relative "../../helpers/toggle"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/command"
4
- require "byebug/helpers/eval"
3
+ require_relative "../command"
4
+ require_relative "../helpers/eval"
5
5
 
6
6
  module Byebug
7
7
  #
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "pathname"
4
- require "byebug/command"
5
- require "byebug/helpers/frame"
6
- require "byebug/helpers/parse"
4
+ require_relative "../command"
5
+ require_relative "../helpers/frame"
6
+ require_relative "../helpers/parse"
7
7
 
8
8
  module Byebug
9
9
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/command"
3
+ require_relative "../command"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -46,6 +46,7 @@ module Byebug
46
46
  if matched.nil?
47
47
  file = frame.file
48
48
  return errmsg(pr("edit.errors.state")) unless file
49
+
49
50
  line = frame.line
50
51
  elsif (@pos_match = /([^:]+)[:]([0-9]+)/.match(matched))
51
52
  file, line = @pos_match.captures
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/subcommands"
3
+ require_relative "../subcommands"
4
4
 
5
- require "byebug/commands/enable/breakpoints"
6
- require "byebug/commands/enable/display"
5
+ require_relative "../commands/enable/breakpoints"
6
+ require_relative "../commands/enable/display"
7
7
 
8
8
  module Byebug
9
9
  #