byebug 9.1.0 → 10.0.0

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