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.
Files changed (129) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +24 -3
  3. data/CONTRIBUTING.md +39 -18
  4. data/GUIDE.md +16 -17
  5. data/README.md +64 -52
  6. data/exe/byebug +6 -0
  7. data/ext/byebug/breakpoint.c +1 -1
  8. data/ext/byebug/byebug.c +16 -16
  9. data/ext/byebug/byebug.h +40 -26
  10. data/ext/byebug/context.c +26 -26
  11. data/ext/byebug/extconf.rb +7 -5
  12. data/ext/byebug/threads.c +8 -8
  13. data/lib/byebug.rb +3 -1
  14. data/lib/byebug/attacher.rb +17 -3
  15. data/lib/byebug/breakpoint.rb +25 -3
  16. data/lib/byebug/command.rb +20 -14
  17. data/lib/byebug/command_list.rb +3 -1
  18. data/lib/byebug/commands.rb +39 -37
  19. data/lib/byebug/commands/break.rb +33 -15
  20. data/lib/byebug/commands/catch.rb +16 -14
  21. data/lib/byebug/commands/condition.rb +11 -9
  22. data/lib/byebug/commands/continue.rb +9 -7
  23. data/lib/byebug/commands/debug.rb +7 -5
  24. data/lib/byebug/commands/delete.rb +11 -9
  25. data/lib/byebug/commands/disable.rb +8 -6
  26. data/lib/byebug/commands/disable/breakpoints.rb +7 -5
  27. data/lib/byebug/commands/disable/display.rb +7 -5
  28. data/lib/byebug/commands/display.rb +11 -9
  29. data/lib/byebug/commands/down.rb +10 -8
  30. data/lib/byebug/commands/edit.rb +10 -8
  31. data/lib/byebug/commands/enable.rb +8 -6
  32. data/lib/byebug/commands/enable/breakpoints.rb +7 -5
  33. data/lib/byebug/commands/enable/display.rb +7 -5
  34. data/lib/byebug/commands/finish.rb +8 -6
  35. data/lib/byebug/commands/frame.rb +11 -9
  36. data/lib/byebug/commands/help.rb +7 -5
  37. data/lib/byebug/commands/history.rb +7 -5
  38. data/lib/byebug/commands/info.rb +11 -9
  39. data/lib/byebug/commands/info/breakpoints.rb +17 -11
  40. data/lib/byebug/commands/info/display.rb +16 -7
  41. data/lib/byebug/commands/info/file.rb +12 -10
  42. data/lib/byebug/commands/info/line.rb +5 -3
  43. data/lib/byebug/commands/info/program.rb +8 -6
  44. data/lib/byebug/commands/interrupt.rb +8 -4
  45. data/lib/byebug/commands/irb.rb +9 -7
  46. data/lib/byebug/commands/kill.rb +9 -7
  47. data/lib/byebug/commands/list.rb +41 -46
  48. data/lib/byebug/commands/method.rb +10 -8
  49. data/lib/byebug/commands/next.rb +8 -6
  50. data/lib/byebug/commands/pry.rb +10 -8
  51. data/lib/byebug/commands/quit.rb +7 -5
  52. data/lib/byebug/commands/restart.rb +13 -11
  53. data/lib/byebug/commands/save.rb +9 -7
  54. data/lib/byebug/commands/set.rb +12 -10
  55. data/lib/byebug/commands/show.rb +7 -5
  56. data/lib/byebug/commands/source.rb +7 -5
  57. data/lib/byebug/commands/step.rb +8 -6
  58. data/lib/byebug/commands/thread.rb +11 -9
  59. data/lib/byebug/commands/thread/current.rb +6 -4
  60. data/lib/byebug/commands/thread/list.rb +7 -5
  61. data/lib/byebug/commands/thread/resume.rb +7 -5
  62. data/lib/byebug/commands/thread/stop.rb +6 -4
  63. data/lib/byebug/commands/thread/switch.rb +6 -4
  64. data/lib/byebug/commands/tracevar.rb +10 -8
  65. data/lib/byebug/commands/undisplay.rb +10 -8
  66. data/lib/byebug/commands/untracevar.rb +8 -6
  67. data/lib/byebug/commands/up.rb +10 -8
  68. data/lib/byebug/commands/var.rb +12 -10
  69. data/lib/byebug/commands/var/all.rb +7 -5
  70. data/lib/byebug/commands/var/args.rb +6 -4
  71. data/lib/byebug/commands/var/const.rb +9 -7
  72. data/lib/byebug/commands/var/global.rb +5 -3
  73. data/lib/byebug/commands/var/instance.rb +6 -4
  74. data/lib/byebug/commands/var/local.rb +6 -4
  75. data/lib/byebug/commands/where.rb +9 -7
  76. data/lib/byebug/context.rb +7 -5
  77. data/lib/byebug/core.rb +25 -25
  78. data/lib/byebug/errors.rb +4 -2
  79. data/lib/byebug/frame.rb +16 -16
  80. data/lib/byebug/helpers/bin.rb +28 -7
  81. data/lib/byebug/helpers/eval.rb +8 -6
  82. data/lib/byebug/helpers/file.rb +4 -2
  83. data/lib/byebug/helpers/frame.rb +5 -3
  84. data/lib/byebug/helpers/parse.rb +5 -3
  85. data/lib/byebug/helpers/path.rb +7 -5
  86. data/lib/byebug/helpers/reflection.rb +2 -0
  87. data/lib/byebug/helpers/string.rb +4 -2
  88. data/lib/byebug/helpers/thread.rb +10 -8
  89. data/lib/byebug/helpers/toggle.rb +10 -8
  90. data/lib/byebug/helpers/var.rb +8 -6
  91. data/lib/byebug/history.rb +7 -5
  92. data/lib/byebug/interface.rb +13 -11
  93. data/lib/byebug/interfaces/local_interface.rb +4 -4
  94. data/lib/byebug/interfaces/remote_interface.rb +21 -9
  95. data/lib/byebug/interfaces/script_interface.rb +2 -0
  96. data/lib/byebug/interfaces/test_interface.rb +5 -3
  97. data/lib/byebug/option_setter.rb +14 -12
  98. data/lib/byebug/printers/base.rb +6 -6
  99. data/lib/byebug/printers/plain.rb +8 -6
  100. data/lib/byebug/printers/texts/base.yml +3 -3
  101. data/lib/byebug/processors/command_processor.rb +11 -12
  102. data/lib/byebug/processors/control_processor.rb +4 -6
  103. data/lib/byebug/processors/post_mortem_processor.rb +4 -2
  104. data/lib/byebug/processors/script_processor.rb +7 -3
  105. data/lib/byebug/remote.rb +45 -65
  106. data/lib/byebug/remote/client.rb +55 -0
  107. data/lib/byebug/remote/server.rb +47 -0
  108. data/lib/byebug/runner.rb +26 -19
  109. data/lib/byebug/setting.rb +10 -4
  110. data/lib/byebug/settings/autoirb.rb +5 -3
  111. data/lib/byebug/settings/autolist.rb +5 -3
  112. data/lib/byebug/settings/autopry.rb +5 -3
  113. data/lib/byebug/settings/autosave.rb +4 -2
  114. data/lib/byebug/settings/basename.rb +4 -2
  115. data/lib/byebug/settings/callstyle.rb +3 -3
  116. data/lib/byebug/settings/fullpath.rb +4 -2
  117. data/lib/byebug/settings/histfile.rb +5 -3
  118. data/lib/byebug/settings/histsize.rb +4 -2
  119. data/lib/byebug/settings/linetrace.rb +4 -2
  120. data/lib/byebug/settings/listsize.rb +4 -2
  121. data/lib/byebug/settings/post_mortem.rb +4 -2
  122. data/lib/byebug/settings/savefile.rb +4 -2
  123. data/lib/byebug/settings/stack_on_error.rb +4 -2
  124. data/lib/byebug/settings/width.rb +3 -1
  125. data/lib/byebug/source_file_formatter.rb +71 -0
  126. data/lib/byebug/subcommands.rb +6 -4
  127. data/lib/byebug/version.rb +1 -1
  128. metadata +8 -5
  129. data/bin/byebug +0 -9
@@ -1,5 +1,7 @@
1
- require 'byebug/command'
2
- require 'byebug/helpers/parse'
1
+ # frozen_string_literal: true
2
+
3
+ require "byebug/command"
4
+ require "byebug/helpers/parse"
3
5
 
4
6
  module Byebug
5
7
  #
@@ -15,7 +17,7 @@ module Byebug
15
17
  end
16
18
 
17
19
  def self.description
18
- <<-EOD
20
+ <<-DESCRIPTION
19
21
  undisp[lay][ nnn]
20
22
 
21
23
  #{short_description}
@@ -23,25 +25,25 @@ module Byebug
23
25
  Arguments are the code numbers of the expressions to stop displaying. No
24
26
  argument means cancel all automatic-display expressions. Type "info
25
27
  display" to see the current list of code numbers.
26
- EOD
28
+ DESCRIPTION
27
29
  end
28
30
 
29
31
  def self.short_description
30
- 'Stops displaying all or some expressions when program stops'
32
+ "Stops displaying all or some expressions when program stops"
31
33
  end
32
34
 
33
35
  def execute
34
36
  if @match[1]
35
- pos, err = get_int(@match[1], 'Undisplay', 1, Byebug.displays.size)
37
+ pos, err = get_int(@match[1], "Undisplay", 1, Byebug.displays.size)
36
38
  return errmsg(err) unless err.nil?
37
39
 
38
40
  unless Byebug.displays[pos - 1]
39
- return errmsg(pr('display.errors.undefined', expr: pos))
41
+ return errmsg(pr("display.errors.undefined", expr: pos))
40
42
  end
41
43
 
42
44
  Byebug.displays[pos - 1][0] = nil
43
45
  else
44
- return unless confirm(pr('display.confirmations.clear_all'))
46
+ return unless confirm(pr("display.confirmations.clear_all"))
45
47
 
46
48
  Byebug.displays.each { |d| d[0] = false }
47
49
  end
@@ -1,4 +1,6 @@
1
- require 'byebug/command'
1
+ # frozen_string_literal: true
2
+
3
+ require "byebug/command"
2
4
 
3
5
  module Byebug
4
6
  #
@@ -10,24 +12,24 @@ module Byebug
10
12
  end
11
13
 
12
14
  def self.description
13
- <<-EOD
15
+ <<-DESCRIPTION
14
16
  untr[acevar] <variable>
15
17
 
16
18
  #{short_description}
17
- EOD
19
+ DESCRIPTION
18
20
  end
19
21
 
20
22
  def self.short_description
21
- 'Stops tracing a global variable'
23
+ "Stops tracing a global variable"
22
24
  end
23
25
 
24
26
  def execute
25
27
  var = @match[1]
26
28
  if global_variables.include?(:"#{var}")
27
29
  untrace_var(:"#{var}")
28
- puts pr('trace.messages.undo', var: var)
30
+ puts pr("trace.messages.undo", var: var)
29
31
  else
30
- errmsg pr('trace.errors.not_global', var: var)
32
+ errmsg pr("trace.errors.not_global", var: var)
31
33
  end
32
34
  end
33
35
  end
@@ -1,7 +1,9 @@
1
- require 'pathname'
2
- require 'byebug/command'
3
- require 'byebug/helpers/frame'
4
- require 'byebug/helpers/parse'
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
- <<-EOD
23
+ <<-DESCRIPTION
22
24
  up[ count]
23
25
 
24
26
  #{short_description}
25
27
 
26
28
  Use the "bt" command to find out where you want to go.
27
- EOD
29
+ DESCRIPTION
28
30
  end
29
31
 
30
32
  def self.short_description
31
- 'Moves to a higher frame in the stack trace'
33
+ "Moves to a higher frame in the stack trace"
32
34
  end
33
35
 
34
36
  def execute
35
- pos, err = parse_steps(@match[1], 'Up')
37
+ pos, err = parse_steps(@match[1], "Up")
36
38
  return errmsg(err) unless pos
37
39
 
38
40
  jump_frames(pos)
@@ -1,11 +1,13 @@
1
- require 'byebug/subcommands'
1
+ # frozen_string_literal: true
2
2
 
3
- require 'byebug/commands/var/all'
4
- require 'byebug/commands/var/args'
5
- require 'byebug/commands/var/const'
6
- require 'byebug/commands/var/instance'
7
- require 'byebug/commands/var/local'
8
- require 'byebug/commands/var/global'
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"
9
11
 
10
12
  module Byebug
11
13
  #
@@ -21,15 +23,15 @@ module Byebug
21
23
  end
22
24
 
23
25
  def self.description
24
- <<-EOD
26
+ <<-DESCRIPTION
25
27
  [v]ar <subcommand>
26
28
 
27
29
  #{short_description}
28
- EOD
30
+ DESCRIPTION
29
31
  end
30
32
 
31
33
  def self.short_description
32
- 'Shows variables and its values'
34
+ "Shows variables and its values"
33
35
  end
34
36
  end
35
37
  end
@@ -1,4 +1,6 @@
1
- require 'byebug/helpers/var'
1
+ # frozen_string_literal: true
2
+
3
+ require "byebug/helpers/var"
2
4
 
3
5
  module Byebug
4
6
  #
@@ -18,20 +20,20 @@ module Byebug
18
20
  end
19
21
 
20
22
  def self.description
21
- <<-EOD
23
+ <<-DESCRIPTION
22
24
  v[ar] a[ll]
23
25
 
24
26
  #{short_description}
25
- EOD
27
+ DESCRIPTION
26
28
  end
27
29
 
28
30
  def self.short_description
29
- 'Shows local, global and instance variables of self.'
31
+ "Shows local, global and instance variables of self."
30
32
  end
31
33
 
32
34
  def execute
33
35
  var_global
34
- var_instance('self')
36
+ var_instance("self")
35
37
  var_local
36
38
  end
37
39
  end
@@ -1,4 +1,6 @@
1
- require 'byebug/helpers/var'
1
+ # frozen_string_literal: true
2
+
3
+ require "byebug/helpers/var"
2
4
 
3
5
  module Byebug
4
6
  #
@@ -18,15 +20,15 @@ module Byebug
18
20
  end
19
21
 
20
22
  def self.description
21
- <<-EOD
23
+ <<-DESCRIPTION
22
24
  v[ar] a[args]
23
25
 
24
26
  #{short_description}
25
- EOD
27
+ DESCRIPTION
26
28
  end
27
29
 
28
30
  def self.short_description
29
- 'Information about arguments of the current scope'
31
+ "Information about arguments of the current scope"
30
32
  end
31
33
 
32
34
  def execute
@@ -1,4 +1,6 @@
1
- require 'byebug/helpers/eval'
1
+ # frozen_string_literal: true
2
+
3
+ require "byebug/helpers/eval"
2
4
 
3
5
  module Byebug
4
6
  #
@@ -18,31 +20,31 @@ module Byebug
18
20
  end
19
21
 
20
22
  def self.description
21
- <<-EOD
23
+ <<-DESCRIPTION
22
24
  v[ar] c[onstant]
23
25
 
24
26
  #{short_description}
25
- EOD
27
+ DESCRIPTION
26
28
  end
27
29
 
28
30
  def self.short_description
29
- 'Shows constants of an object.'
31
+ "Shows constants of an object."
30
32
  end
31
33
 
32
34
  def execute
33
35
  obj = warning_eval(str_obj)
34
36
  unless obj.is_a?(Module)
35
- return errmsg(pr('variable.errors.not_module', object: str_obj))
37
+ return errmsg(pr("variable.errors.not_module", object: str_obj))
36
38
  end
37
39
 
38
40
  constants = warning_eval("#{str_obj}.constants")
39
- puts prv(constants.sort.map { |c| [c, obj.const_get(c)] }, 'constant')
41
+ puts prv(constants.sort.map { |c| [c, obj.const_get(c)] }, "constant")
40
42
  end
41
43
 
42
44
  private
43
45
 
44
46
  def str_obj
45
- @str_obj ||= @match[1] || 'self.class'
47
+ @str_obj ||= @match[1] || "self.class"
46
48
  end
47
49
  end
48
50
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Byebug
2
4
  #
3
5
  # Reopens the +var+ command to define the +global+ subcommand
@@ -16,15 +18,15 @@ module Byebug
16
18
  end
17
19
 
18
20
  def self.description
19
- <<-EOD
21
+ <<-DESCRIPTION
20
22
  v[ar] g[lobal]
21
23
 
22
24
  #{short_description}
23
- EOD
25
+ DESCRIPTION
24
26
  end
25
27
 
26
28
  def self.short_description
27
- 'Shows global variables.'
29
+ "Shows global variables."
28
30
  end
29
31
 
30
32
  def execute
@@ -1,4 +1,6 @@
1
- require 'byebug/helpers/var'
1
+ # frozen_string_literal: true
2
+
3
+ require "byebug/helpers/var"
2
4
 
3
5
  module Byebug
4
6
  #
@@ -18,15 +20,15 @@ module Byebug
18
20
  end
19
21
 
20
22
  def self.description
21
- <<-EOD
23
+ <<-DESCRIPTION
22
24
  v[ar] i[nstance][ <object>]
23
25
 
24
26
  #{short_description}
25
- EOD
27
+ DESCRIPTION
26
28
  end
27
29
 
28
30
  def self.short_description
29
- 'Shows instance variables of self or a specific object.'
31
+ "Shows instance variables of self or a specific object."
30
32
  end
31
33
 
32
34
  def execute
@@ -1,4 +1,6 @@
1
- require 'byebug/helpers/var'
1
+ # frozen_string_literal: true
2
+
3
+ require "byebug/helpers/var"
2
4
 
3
5
  module Byebug
4
6
  #
@@ -18,15 +20,15 @@ module Byebug
18
20
  end
19
21
 
20
22
  def self.description
21
- <<-EOD
23
+ <<-DESCRIPTION
22
24
  v[ar] l[ocal]
23
25
 
24
26
  #{short_description}
25
- EOD
27
+ DESCRIPTION
26
28
  end
27
29
 
28
30
  def self.short_description
29
- 'Shows local variables in current scope.'
31
+ "Shows local variables in current scope."
30
32
  end
31
33
 
32
34
  def execute
@@ -1,6 +1,8 @@
1
- require 'pathname'
2
- require 'byebug/command'
3
- require 'byebug/helpers/frame'
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
4
+ require "byebug/command"
5
+ require "byebug/helpers/frame"
4
6
 
5
7
  module Byebug
6
8
  #
@@ -16,7 +18,7 @@ module Byebug
16
18
  end
17
19
 
18
20
  def self.description
19
- <<-EOD
21
+ <<-DESCRIPTION
20
22
  w[here]|bt|backtrace
21
23
 
22
24
  #{short_description}
@@ -27,11 +29,11 @@ module Byebug
27
29
  The position of the current frame is marked with -->. C-frames hang
28
30
  from their most immediate Ruby frame to indicate that they are not
29
31
  navigable.
30
- EOD
32
+ DESCRIPTION
31
33
  end
32
34
 
33
35
  def self.short_description
34
- 'Displays the backtrace'
36
+ "Displays the backtrace"
35
37
  end
36
38
 
37
39
  def execute
@@ -41,7 +43,7 @@ module Byebug
41
43
  private
42
44
 
43
45
  def print_backtrace
44
- bt = prc('frame.line', (0...context.stack_size)) do |_, index|
46
+ bt = prc("frame.line", (0...context.stack_size)) do |_, index|
45
47
  Frame.new(context, index).to_hash
46
48
  end
47
49
 
@@ -1,7 +1,9 @@
1
- require 'byebug/frame'
2
- require 'byebug/helpers/path'
3
- require 'byebug/helpers/file'
4
- require 'byebug/processors/command_processor'
1
+ # frozen_string_literal: true
2
+
3
+ require "byebug/frame"
4
+ require "byebug/helpers/path"
5
+ require "byebug/helpers/file"
6
+ require "byebug/processors/command_processor"
5
7
 
6
8
  module Byebug
7
9
  #
@@ -140,7 +142,7 @@ module Byebug
140
142
  private
141
143
 
142
144
  def processor
143
- @processor ||= self.class.processor.new(self)
145
+ @processor ||= self.class.processor.new(self, self.class.interface)
144
146
  end
145
147
 
146
148
  #
@@ -1,13 +1,15 @@
1
- require 'byebug/helpers/reflection'
2
- require 'byebug/byebug'
3
- require 'byebug/context'
4
- require 'byebug/breakpoint'
5
- require 'byebug/interface'
6
- require 'byebug/processors/script_processor'
7
- require 'byebug/processors/post_mortem_processor'
8
- require 'byebug/commands'
9
- require 'byebug/remote'
10
- require 'byebug/printers/plain'
1
+ # frozen_string_literal: true
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"
11
13
 
12
14
  #
13
15
  # Main debugger's container module. Everything is defined under this module
@@ -21,7 +23,7 @@ module Byebug
21
23
  # Configuration file used for startup commands. Default value is .byebugrc
22
24
  #
23
25
  attr_accessor :init_file
24
- self.init_file = '.byebugrc'
26
+ self.init_file = ".byebugrc"
25
27
 
26
28
  #
27
29
  # Debugger's display expressions
@@ -33,7 +35,7 @@ module Byebug
33
35
  # Running mode of the debugger. Can be either:
34
36
  #
35
37
  # * :attached => Attached to a running program through the `byebug` method.
36
- # * :standalone => Started through `bin/byebug` script.
38
+ # * :standalone => Started through `byebug` script.
37
39
  #
38
40
  attr_accessor :mode
39
41
 
@@ -47,11 +49,16 @@ module Byebug
47
49
  # are debugging, in the directory where you invoke byebug.
48
50
  #
49
51
  def run_init_script
50
- rc_dirs.each { |dir| run_rc_file(dir) }
52
+ rc_dirs.each do |dir|
53
+ rc_file = File.expand_path(File.join(dir, init_file))
54
+ next unless File.exist?(rc_file)
55
+
56
+ run_rc_file(rc_file)
57
+ end
51
58
  end
52
59
 
53
60
  def self.load_settings
54
- Dir.glob(File.join(__dir__, 'settings', '*.rb')).each do |file|
61
+ Dir.glob(File.join(__dir__, "settings", "*.rb")).each do |file|
55
62
  require file
56
63
  end
57
64
 
@@ -80,17 +87,10 @@ module Byebug
80
87
  #
81
88
  # Runs a initialization script file
82
89
  #
83
- def run_rc_file(base_path)
84
- old_interface = Context.interface
85
-
86
- rc_file = File.expand_path(File.join(base_path, init_file))
87
- return unless File.exist?(rc_file)
88
-
89
- Context.interface = ScriptInterface.new(rc_file)
90
+ def run_rc_file(rc_file)
91
+ interface = ScriptInterface.new(rc_file)
90
92
 
91
- ScriptProcessor.new(nil).process_commands
92
- ensure
93
- Context.interface = old_interface
93
+ ScriptProcessor.new(nil, interface).process_commands
94
94
  end
95
95
 
96
96
  #
@@ -99,7 +99,7 @@ module Byebug
99
99
  # @note Files will be loaded in the order specified here.
100
100
  #
101
101
  def rc_dirs
102
- [ENV['HOME'], Dir.pwd].compact.uniq
102
+ [ENV["HOME"], Dir.pwd].compact.uniq
103
103
  end
104
104
  end
105
105