byebug 10.0.0 → 11.1.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.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +350 -284
  3. data/CONTRIBUTING.md +6 -34
  4. data/GUIDE.md +9 -8
  5. data/LICENSE +18 -18
  6. data/README.md +83 -70
  7. data/exe/byebug +1 -1
  8. data/ext/byebug/breakpoint.c +1 -1
  9. data/ext/byebug/byebug.c +10 -15
  10. data/ext/byebug/byebug.h +11 -9
  11. data/ext/byebug/context.c +21 -8
  12. data/ext/byebug/locker.c +4 -4
  13. data/ext/byebug/threads.c +4 -4
  14. data/lib/byebug.rb +1 -1
  15. data/lib/byebug/attacher.rb +4 -4
  16. data/lib/byebug/command.rb +2 -2
  17. data/lib/byebug/command_list.rb +1 -1
  18. data/lib/byebug/commands.rb +38 -37
  19. data/lib/byebug/commands/break.rb +10 -14
  20. data/lib/byebug/commands/catch.rb +4 -8
  21. data/lib/byebug/commands/condition.rb +3 -5
  22. data/lib/byebug/commands/continue.rb +27 -9
  23. data/lib/byebug/commands/debug.rb +2 -2
  24. data/lib/byebug/commands/delete.rb +3 -5
  25. data/lib/byebug/commands/disable.rb +4 -4
  26. data/lib/byebug/commands/disable/breakpoints.rb +1 -1
  27. data/lib/byebug/commands/disable/display.rb +1 -1
  28. data/lib/byebug/commands/display.rb +2 -2
  29. data/lib/byebug/commands/down.rb +3 -3
  30. data/lib/byebug/commands/edit.rb +2 -1
  31. data/lib/byebug/commands/enable.rb +3 -3
  32. data/lib/byebug/commands/enable/breakpoints.rb +1 -1
  33. data/lib/byebug/commands/enable/display.rb +1 -1
  34. data/lib/byebug/commands/finish.rb +2 -2
  35. data/lib/byebug/commands/frame.rb +3 -3
  36. data/lib/byebug/commands/help.rb +2 -2
  37. data/lib/byebug/commands/history.rb +2 -2
  38. data/lib/byebug/commands/info.rb +6 -6
  39. data/lib/byebug/commands/info/breakpoints.rb +2 -4
  40. data/lib/byebug/commands/info/display.rb +1 -3
  41. data/lib/byebug/commands/info/file.rb +2 -4
  42. data/lib/byebug/commands/interrupt.rb +1 -1
  43. data/lib/byebug/commands/irb.rb +2 -4
  44. data/lib/byebug/commands/kill.rb +3 -5
  45. data/lib/byebug/commands/list.rb +4 -4
  46. data/lib/byebug/commands/method.rb +2 -2
  47. data/lib/byebug/commands/next.rb +2 -2
  48. data/lib/byebug/commands/pry.rb +3 -5
  49. data/lib/byebug/commands/quit.rb +4 -4
  50. data/lib/byebug/commands/restart.rb +3 -3
  51. data/lib/byebug/commands/save.rb +1 -1
  52. data/lib/byebug/commands/set.rb +3 -3
  53. data/lib/byebug/commands/show.rb +1 -1
  54. data/lib/byebug/commands/skip.rb +85 -0
  55. data/lib/byebug/commands/source.rb +2 -4
  56. data/lib/byebug/commands/step.rb +2 -2
  57. data/lib/byebug/commands/thread.rb +6 -6
  58. data/lib/byebug/commands/thread/current.rb +1 -1
  59. data/lib/byebug/commands/thread/list.rb +1 -1
  60. data/lib/byebug/commands/thread/resume.rb +2 -4
  61. data/lib/byebug/commands/thread/stop.rb +1 -1
  62. data/lib/byebug/commands/thread/switch.rb +1 -1
  63. data/lib/byebug/commands/tracevar.rb +2 -5
  64. data/lib/byebug/commands/undisplay.rb +5 -6
  65. data/lib/byebug/commands/untracevar.rb +1 -1
  66. data/lib/byebug/commands/up.rb +3 -3
  67. data/lib/byebug/commands/var.rb +8 -8
  68. data/lib/byebug/commands/var/all.rb +1 -1
  69. data/lib/byebug/commands/var/args.rb +1 -1
  70. data/lib/byebug/commands/var/const.rb +2 -4
  71. data/lib/byebug/commands/var/instance.rb +1 -1
  72. data/lib/byebug/commands/var/local.rb +1 -1
  73. data/lib/byebug/commands/where.rb +2 -2
  74. data/lib/byebug/context.rb +4 -4
  75. data/lib/byebug/core.rb +11 -10
  76. data/lib/byebug/frame.rb +2 -2
  77. data/lib/byebug/helpers/bin.rb +2 -2
  78. data/lib/byebug/helpers/eval.rb +7 -7
  79. data/lib/byebug/helpers/frame.rb +3 -3
  80. data/lib/byebug/helpers/parse.rb +1 -3
  81. data/lib/byebug/helpers/string.rb +0 -3
  82. data/lib/byebug/helpers/toggle.rb +2 -4
  83. data/lib/byebug/helpers/var.rb +1 -1
  84. data/lib/byebug/history.rb +5 -5
  85. data/lib/byebug/interface.rb +6 -6
  86. data/lib/byebug/interfaces/local_interface.rb +1 -1
  87. data/lib/byebug/interfaces/remote_interface.rb +1 -1
  88. data/lib/byebug/interfaces/script_interface.rb +2 -1
  89. data/lib/byebug/printers/base.rb +4 -5
  90. data/lib/byebug/printers/plain.rb +2 -2
  91. data/lib/byebug/processors/command_processor.rb +2 -2
  92. data/lib/byebug/processors/control_processor.rb +1 -1
  93. data/lib/byebug/processors/post_mortem_processor.rb +1 -1
  94. data/lib/byebug/processors/script_processor.rb +1 -1
  95. data/lib/byebug/remote.rb +3 -3
  96. data/lib/byebug/remote/client.rb +2 -0
  97. data/lib/byebug/runner.rb +7 -7
  98. data/lib/byebug/setting.rb +2 -2
  99. data/lib/byebug/settings/autoirb.rb +4 -4
  100. data/lib/byebug/settings/autolist.rb +4 -4
  101. data/lib/byebug/settings/autopry.rb +4 -4
  102. data/lib/byebug/settings/autosave.rb +1 -1
  103. data/lib/byebug/settings/basename.rb +1 -1
  104. data/lib/byebug/settings/callstyle.rb +2 -2
  105. data/lib/byebug/settings/fullpath.rb +1 -1
  106. data/lib/byebug/settings/histfile.rb +1 -1
  107. data/lib/byebug/settings/histsize.rb +1 -1
  108. data/lib/byebug/settings/linetrace.rb +3 -3
  109. data/lib/byebug/settings/listsize.rb +1 -1
  110. data/lib/byebug/settings/post_mortem.rb +3 -3
  111. data/lib/byebug/settings/savefile.rb +1 -1
  112. data/lib/byebug/settings/stack_on_error.rb +1 -1
  113. data/lib/byebug/settings/width.rb +1 -1
  114. data/lib/byebug/source_file_formatter.rb +2 -2
  115. data/lib/byebug/subcommands.rb +2 -2
  116. data/lib/byebug/version.rb +1 -1
  117. metadata +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
  #
@@ -16,12 +16,12 @@ module Byebug
16
16
 
17
17
  def self.description
18
18
  <<-DESCRIPTION
19
- q[uit] [!|unconditionally]
19
+ q[uit][!| unconditionally]
20
20
 
21
21
  #{short_description}
22
22
 
23
- Normally we prompt before exiting. However if the parameter
24
- "unconditionally" is given or command is suffixed with !, we exit
23
+ Normally we prompt before exiting. However, if the parameter
24
+ "unconditionally" is given or command is suffixed with "!", we exit
25
25
  without asking further questions.
26
26
  DESCRIPTION
27
27
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/command"
4
- require "byebug/helpers/bin"
5
- require "byebug/helpers/path"
3
+ require_relative "../command"
4
+ require_relative "../helpers/bin"
5
+ require_relative "../helpers/path"
6
6
  require "shellwords"
7
7
  require "English"
8
8
  require "rbconfig"
@@ -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
  #
@@ -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
  #
@@ -50,7 +50,7 @@ module Byebug
50
50
  if !setting.boolean? && value.nil?
51
51
  err = pr("set.errors.must_specify_value", key: key)
52
52
  elsif setting.boolean?
53
- value, err = get_onoff(value, key =~ /^no/ ? false : true)
53
+ value, err = get_onoff(value, /^no/.match?(key) ? false : true)
54
54
  elsif setting.integer?
55
55
  value, err = get_int(value, setting.to_sym, 1)
56
56
  end
@@ -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
  #
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../command"
4
+ require_relative "../helpers/parse"
5
+
6
+ module Byebug
7
+ #
8
+ # Allows the user to continue execution until the next breakpoint, as
9
+ # long as it is different from the current one
10
+ #
11
+ class SkipCommand < Command
12
+ include Helpers::ParseHelper
13
+
14
+ class << self
15
+ attr_writer :file_line, :file_path
16
+ attr_reader :previous_autolist
17
+
18
+ def file_line
19
+ @file_line ||= 0
20
+ end
21
+
22
+ def file_path
23
+ @file_path ||= ""
24
+ end
25
+
26
+ def setup_autolist(value)
27
+ @previous_autolist = ListCommand.always_run
28
+ ListCommand.always_run = value
29
+ end
30
+
31
+ def restore_autolist
32
+ ListCommand.always_run = @previous_autolist
33
+ @previous_autolist = nil
34
+ end
35
+ end
36
+
37
+ def self.regexp
38
+ /^\s* sk(?:ip)? \s*$/x
39
+ end
40
+
41
+ def self.description
42
+ <<-DESCRIPTION
43
+ sk[ip]
44
+
45
+ #{short_description}
46
+ DESCRIPTION
47
+ end
48
+
49
+ def self.short_description
50
+ "Runs until the next breakpoint as long as it is different from the current one"
51
+ end
52
+
53
+ def initialize_attributes
54
+ self.class.always_run = 2
55
+ self.class.setup_autolist(0)
56
+ self.class.file_path = frame.file
57
+ self.class.file_line = frame.line
58
+ end
59
+
60
+ def keep_execution
61
+ [self.class.file_path, self.class.file_line] == [frame.file, frame.line]
62
+ end
63
+
64
+ def reset_attributes
65
+ self.class.always_run = 0
66
+ ListCommand.new(processor).execute if self.class.previous_autolist == 1
67
+ self.class.restore_autolist
68
+ end
69
+
70
+ def auto_run
71
+ return false unless self.class.always_run == 2
72
+
73
+ keep_execution ? processor.proceed! : reset_attributes
74
+ true
75
+ end
76
+
77
+ def execute
78
+ return if auto_run
79
+
80
+ initialize_attributes
81
+ processor.proceed!
82
+ Byebug.stop if Byebug.stoppable?
83
+ end
84
+ end
85
+ end
@@ -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
  #
@@ -32,9 +32,7 @@ module Byebug
32
32
  return puts(help) unless @match[1]
33
33
 
34
34
  file = File.expand_path(@match[1]).strip
35
- unless File.exist?(file)
36
- return errmsg(pr("source.errors.not_found", file: file))
37
- end
35
+ return errmsg(pr("source.errors.not_found", file: file)) unless File.exist?(file)
38
36
 
39
37
  processor.interface.read_file(file)
40
38
  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
  #
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/subcommands"
3
+ require_relative "../subcommands"
4
4
 
5
- require "byebug/commands/thread/current"
6
- require "byebug/commands/thread/list"
7
- require "byebug/commands/thread/resume"
8
- require "byebug/commands/thread/stop"
9
- require "byebug/commands/thread/switch"
5
+ require_relative "../commands/thread/current"
6
+ require_relative "../commands/thread/list"
7
+ require_relative "../commands/thread/resume"
8
+ require_relative "../commands/thread/stop"
9
+ require_relative "../commands/thread/switch"
10
10
 
11
11
  module Byebug
12
12
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/thread"
3
+ require_relative "../../helpers/thread"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/thread"
3
+ require_relative "../../helpers/thread"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/thread"
3
+ require_relative "../../helpers/thread"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -35,9 +35,7 @@ module Byebug
35
35
  context, err = context_from_thread(@match[1])
36
36
  return errmsg(err) if err
37
37
 
38
- unless context.suspended?
39
- return errmsg(pr("thread.errors.already_running"))
40
- end
38
+ return errmsg(pr("thread.errors.already_running")) unless context.suspended?
41
39
 
42
40
  context.resume
43
41
  display_context(context)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/thread"
3
+ require_relative "../../helpers/thread"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/thread"
3
+ require_relative "../../helpers/thread"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -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
  #
@@ -32,10 +32,7 @@ module Byebug
32
32
  def execute
33
33
  var = @match[1]
34
34
  return errmsg(pr("trace.errors.needs_global_variable")) unless var
35
-
36
- unless global_variables.include?(:"#{var}")
37
- return errmsg(pr("trace.errors.var_is_not_global", name: var))
38
- end
35
+ return errmsg(pr("trace.errors.var_is_not_global", name: var)) unless global_variables.include?(:"#{var}")
39
36
 
40
37
  stop = @match[2] && @match[2] !~ /nostop/
41
38
 
@@ -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
  #
@@ -37,11 +37,10 @@ module Byebug
37
37
  pos, err = get_int(@match[1], "Undisplay", 1, Byebug.displays.size)
38
38
  return errmsg(err) unless err.nil?
39
39
 
40
- unless Byebug.displays[pos - 1]
41
- return errmsg(pr("display.errors.undefined", expr: pos))
42
- end
40
+ last_display = Byebug.displays[pos - 1]
41
+ return errmsg(pr("display.errors.undefined", expr: pos)) unless last_display
43
42
 
44
- Byebug.displays[pos - 1][0] = nil
43
+ last_display[0] = nil
45
44
  else
46
45
  return unless confirm(pr("display.confirmations.clear_all"))
47
46
 
@@ -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
  #
@@ -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,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/subcommands"
4
-
5
- require "byebug/commands/var/all"
6
- require "byebug/commands/var/args"
7
- require "byebug/commands/var/const"
8
- require "byebug/commands/var/instance"
9
- require "byebug/commands/var/local"
10
- require "byebug/commands/var/global"
3
+ require_relative "../subcommands"
4
+
5
+ require_relative "var/all"
6
+ require_relative "var/args"
7
+ require_relative "var/const"
8
+ require_relative "var/instance"
9
+ require_relative "var/local"
10
+ require_relative "var/global"
11
11
 
12
12
  module Byebug
13
13
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/var"
3
+ require_relative "../../helpers/var"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/var"
3
+ require_relative "../../helpers/var"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/eval"
3
+ require_relative "../../helpers/eval"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -33,9 +33,7 @@ module Byebug
33
33
 
34
34
  def execute
35
35
  obj = warning_eval(str_obj)
36
- unless obj.is_a?(Module)
37
- return errmsg(pr("variable.errors.not_module", object: str_obj))
38
- end
36
+ return errmsg(pr("variable.errors.not_module", object: str_obj)) unless obj.is_a?(Module)
39
37
 
40
38
  constants = warning_eval("#{str_obj}.constants")
41
39
  puts prv(constants.sort.map { |c| [c, obj.const_get(c)] }, "constant")
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/var"
3
+ require_relative "../../helpers/var"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/var"
3
+ require_relative "../../helpers/var"
4
4
 
5
5
  module Byebug
6
6
  #
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "pathname"
4
- require "byebug/command"
5
- require "byebug/helpers/frame"
4
+ require_relative "../command"
5
+ require_relative "../helpers/frame"
6
6
 
7
7
  module Byebug
8
8
  #
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/frame"
4
- require "byebug/helpers/path"
5
- require "byebug/helpers/file"
6
- require "byebug/processors/command_processor"
3
+ require_relative "frame"
4
+ require_relative "helpers/path"
5
+ require_relative "helpers/file"
6
+ require_relative "processors/command_processor"
7
7
 
8
8
  module Byebug
9
9
  #
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "byebug/helpers/reflection"
4
- require "byebug/byebug"
5
- require "byebug/context"
6
- require "byebug/breakpoint"
7
- require "byebug/interface"
8
- require "byebug/processors/script_processor"
9
- require "byebug/processors/post_mortem_processor"
10
- require "byebug/commands"
11
- require "byebug/remote"
12
- require "byebug/printers/plain"
3
+ require_relative "helpers/reflection"
4
+ require_relative "byebug"
5
+ require_relative "context"
6
+ require_relative "breakpoint"
7
+ require_relative "interface"
8
+ require_relative "processors/script_processor"
9
+ require_relative "processors/post_mortem_processor"
10
+ require_relative "commands"
11
+ require_relative "remote"
12
+ require_relative "printers/plain"
13
13
 
14
14
  #
15
15
  # Main debugger's container module. Everything is defined under this module
@@ -36,6 +36,7 @@ module Byebug
36
36
  #
37
37
  # * :attached => Attached to a running program through the `byebug` method.
38
38
  # * :standalone => Started through `byebug` script.
39
+ # * :off => Ignoring any `byebug` method calls.
39
40
  #
40
41
  attr_accessor :mode
41
42