byebug 4.0.5 → 5.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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +72 -34
  3. data/CONTRIBUTING.md +26 -31
  4. data/README.md +3 -3
  5. data/lib/byebug/breakpoint.rb +2 -1
  6. data/lib/byebug/command.rb +27 -49
  7. data/lib/byebug/commands/break.rb +21 -15
  8. data/lib/byebug/commands/catch.rb +9 -15
  9. data/lib/byebug/commands/condition.rb +12 -15
  10. data/lib/byebug/commands/continue.rb +8 -11
  11. data/lib/byebug/commands/delete.rb +9 -12
  12. data/lib/byebug/commands/disable.rb +32 -0
  13. data/lib/byebug/commands/disable/breakpoints.rb +38 -0
  14. data/lib/byebug/commands/disable/display.rb +39 -0
  15. data/lib/byebug/commands/display.rb +18 -51
  16. data/lib/byebug/commands/down.rb +39 -0
  17. data/lib/byebug/commands/edit.rb +8 -14
  18. data/lib/byebug/commands/enable.rb +25 -0
  19. data/lib/byebug/commands/enable/breakpoints.rb +38 -0
  20. data/lib/byebug/commands/enable/display.rb +39 -0
  21. data/lib/byebug/commands/eval.rb +10 -192
  22. data/lib/byebug/commands/finish.rb +11 -12
  23. data/lib/byebug/commands/frame.rb +17 -182
  24. data/lib/byebug/commands/help.rb +18 -18
  25. data/lib/byebug/commands/history.rb +9 -10
  26. data/lib/byebug/commands/info.rb +17 -190
  27. data/lib/byebug/commands/info/args.rb +39 -0
  28. data/lib/byebug/commands/info/breakpoints.rb +59 -0
  29. data/lib/byebug/commands/info/catch.rb +39 -0
  30. data/lib/byebug/commands/info/display.rb +42 -0
  31. data/lib/byebug/commands/info/file.rb +81 -0
  32. data/lib/byebug/commands/info/line.rb +31 -0
  33. data/lib/byebug/commands/info/program.rb +51 -0
  34. data/lib/byebug/commands/interrupt.rb +5 -9
  35. data/lib/byebug/commands/irb.rb +5 -9
  36. data/lib/byebug/commands/kill.rb +6 -12
  37. data/lib/byebug/commands/list.rb +47 -19
  38. data/lib/byebug/commands/method.rb +8 -14
  39. data/lib/byebug/commands/next.rb +36 -0
  40. data/lib/byebug/commands/pp.rb +41 -0
  41. data/lib/byebug/commands/pry.rb +5 -9
  42. data/lib/byebug/commands/ps.rb +44 -0
  43. data/lib/byebug/commands/putl.rb +43 -0
  44. data/lib/byebug/commands/quit.rb +8 -12
  45. data/lib/byebug/commands/restart.rb +6 -12
  46. data/lib/byebug/commands/save.rb +30 -39
  47. data/lib/byebug/commands/set.rb +19 -21
  48. data/lib/byebug/commands/show.rb +10 -16
  49. data/lib/byebug/commands/source.rb +6 -12
  50. data/lib/byebug/commands/step.rb +36 -0
  51. data/lib/byebug/commands/thread.rb +13 -130
  52. data/lib/byebug/commands/thread/current.rb +35 -0
  53. data/lib/byebug/commands/thread/list.rb +41 -0
  54. data/lib/byebug/commands/thread/resume.rb +45 -0
  55. data/lib/byebug/commands/thread/stop.rb +41 -0
  56. data/lib/byebug/commands/thread/switch.rb +43 -0
  57. data/lib/byebug/commands/tracevar.rb +8 -14
  58. data/lib/byebug/commands/undisplay.rb +12 -15
  59. data/lib/byebug/commands/untracevar.rb +5 -11
  60. data/lib/byebug/commands/up.rb +39 -0
  61. data/lib/byebug/commands/var.rb +15 -94
  62. data/lib/byebug/commands/var/all.rb +37 -0
  63. data/lib/byebug/commands/var/const.rb +38 -0
  64. data/lib/byebug/commands/var/global.rb +33 -0
  65. data/lib/byebug/commands/var/instance.rb +35 -0
  66. data/lib/byebug/commands/var/local.rb +35 -0
  67. data/lib/byebug/commands/where.rb +47 -0
  68. data/lib/byebug/core.rb +10 -0
  69. data/lib/byebug/helpers/eval.rb +47 -0
  70. data/lib/byebug/helpers/file.rb +46 -0
  71. data/lib/byebug/helpers/frame.rb +76 -0
  72. data/lib/byebug/helpers/parse.rb +74 -0
  73. data/lib/byebug/helpers/string.rb +24 -0
  74. data/lib/byebug/helpers/thread.rb +53 -0
  75. data/lib/byebug/helpers/toggle.rb +56 -0
  76. data/lib/byebug/helpers/var.rb +45 -0
  77. data/lib/byebug/history.rb +2 -4
  78. data/lib/byebug/interface.rb +5 -3
  79. data/lib/byebug/interfaces/local_interface.rb +3 -1
  80. data/lib/byebug/interfaces/remote_interface.rb +3 -1
  81. data/lib/byebug/interfaces/test_interface.rb +6 -2
  82. data/lib/byebug/printers/plain.rb +1 -1
  83. data/lib/byebug/processors/command_processor.rb +9 -11
  84. data/lib/byebug/processors/control_command_processor.rb +1 -1
  85. data/lib/byebug/remote.rb +3 -0
  86. data/lib/byebug/runner.rb +5 -3
  87. data/lib/byebug/setting.rb +2 -18
  88. data/lib/byebug/settings/savefile.rb +21 -0
  89. data/lib/byebug/states/regular_state.rb +15 -6
  90. data/lib/byebug/subcommand_list.rb +33 -0
  91. data/lib/byebug/subcommands.rb +53 -0
  92. data/lib/byebug/version.rb +1 -1
  93. metadata +45 -6
  94. data/lib/byebug/commands/enable_disable.rb +0 -132
  95. data/lib/byebug/commands/stepping.rb +0 -75
  96. data/lib/byebug/helper.rb +0 -131
@@ -42,21 +42,15 @@ module Byebug
42
42
  errmsg pr('catch.errors.off', off: cmd)
43
43
  end
44
44
 
45
- class << self
46
- def names
47
- %w(catch)
48
- end
49
-
50
- def description
51
- prettify <<-EOD
52
- cat[ch][ (off|<exception>[ off])]
53
-
54
- "catch" lists catchpoints.
55
- "catch off" deletes all catchpoints.
56
- "catch <exception>" enables handling <exception>.
57
- "catch <exception> off" disables handling <exception>.
58
- EOD
59
- end
45
+ def description
46
+ <<-EOD
47
+ cat[ch][ (off|<exception>[ off])]
48
+
49
+ "catch" lists catchpoints.
50
+ "catch off" deletes all catchpoints.
51
+ "catch <exception>" enables handling <exception>.
52
+ "catch <exception> off" disables handling <exception>.
53
+ EOD
60
54
  end
61
55
  end
62
56
  end
@@ -1,4 +1,5 @@
1
1
  require 'byebug/command'
2
+ require 'byebug/helpers/parse'
2
3
 
3
4
  module Byebug
4
5
  #
@@ -7,6 +8,8 @@ module Byebug
7
8
  # Adds the ability to stop on breakpoints only under certain conditions.
8
9
  #
9
10
  class ConditionCommand < Command
11
+ include Helpers::ParseHelper
12
+
10
13
  self.allow_in_post_mortem = false
11
14
 
12
15
  def regexp
@@ -14,7 +17,7 @@ module Byebug
14
17
  end
15
18
 
16
19
  def execute
17
- return puts(self.class.help) unless @match[1]
20
+ return puts(help) unless @match[1]
18
21
 
19
22
  breakpoints = Byebug.breakpoints.sort_by(&:id)
20
23
  return errmsg(pr('condition.errors.no_breakpoints')) if breakpoints.empty?
@@ -32,21 +35,15 @@ module Byebug
32
35
  breakpoint.expr = @match[2]
33
36
  end
34
37
 
35
- class << self
36
- def names
37
- %w(condition)
38
- end
39
-
40
- def description
41
- prettify <<-EOD
42
- cond[ition] <n>[ expr]
38
+ def description
39
+ <<-EOD
40
+ cond[ition] <n>[ expr]
43
41
 
44
- Specify breakpoint number <n> to break only if <expr> is true. <n> is
45
- an integer and <expr> is an expression to be evaluated whenever
46
- breakpoint <n> is reached. If no expression is specified, the
47
- condition is removed.
48
- EOD
49
- end
42
+ Specify breakpoint number <n> to break only if <expr> is true. <n> is
43
+ an integer and <expr> is an expression to be evaluated whenever
44
+ breakpoint <n> is reached. If no expression is specified, the condition
45
+ is removed.
46
+ EOD
50
47
  end
51
48
  end
52
49
  end
@@ -1,4 +1,5 @@
1
1
  require 'byebug/command'
2
+ require 'byebug/helpers/parse'
2
3
 
3
4
  module Byebug
4
5
  #
@@ -8,6 +9,8 @@ module Byebug
8
9
  # specific line number or until program termination.
9
10
  #
10
11
  class ContinueCommand < Command
12
+ include Helpers::ParseHelper
13
+
11
14
  def regexp
12
15
  /^\s* c(?:ont(?:inue)?)? (?:\s+(\S+))? \s*$/x
13
16
  end
@@ -28,18 +31,12 @@ module Byebug
28
31
  @state.proceed
29
32
  end
30
33
 
31
- class << self
32
- def names
33
- %w(continue)
34
- end
35
-
36
- def description
37
- prettify <<-EOD
38
- c[ont[inue]][ <n>]
34
+ def description
35
+ <<-EOD
36
+ c[ont[inue]][ <n>]
39
37
 
40
- Run until program ends, hits a breakpoint or reaches line <n>.
41
- EOD
42
- end
38
+ Run until program ends, hits a breakpoint or reaches line <n>.
39
+ EOD
43
40
  end
44
41
  end
45
42
  end
@@ -1,10 +1,13 @@
1
1
  require 'byebug/command'
2
+ require 'byebug/helpers/parse'
2
3
 
3
4
  module Byebug
4
5
  #
5
6
  # Implements breakpoint deletion.
6
7
  #
7
8
  class DeleteCommand < Command
9
+ include Helpers::ParseHelper
10
+
8
11
  self.allow_in_post_mortem = false
9
12
  self.allow_in_control = true
10
13
 
@@ -32,19 +35,13 @@ module Byebug
32
35
  end
33
36
  end
34
37
 
35
- class << self
36
- def names
37
- %w(delete)
38
- end
39
-
40
- def description
41
- prettify <<-EOD
42
- del[ete][ nnn...]
38
+ def description
39
+ <<-EOD
40
+ del[ete][ nnn...]
43
41
 
44
- Without and argument, deletes all breakpoints. With integer
45
- arguments, it deletes specific breakpoints.
46
- EOD
47
- end
42
+ Without and argument, deletes all breakpoints. With integer arguments,
43
+ it deletes specific breakpoints.
44
+ EOD
48
45
  end
49
46
  end
50
47
  end
@@ -0,0 +1,32 @@
1
+ require 'byebug/subcommands'
2
+
3
+ require 'byebug/commands/disable/breakpoints'
4
+ require 'byebug/commands/disable/display'
5
+
6
+ module Byebug
7
+ #
8
+ # Disabling custom display expressions or breakpoints.
9
+ #
10
+ class DisableCommand < Command
11
+ include Subcommands
12
+
13
+ def regexp
14
+ /^\s* dis(?:able)? (?:\s+ (.+))? \s*$/x
15
+ end
16
+
17
+ def description
18
+ <<-EOD
19
+ dis[able][[ breakpoints| display)][ n1[ n2[ ...[ nn]]]]]
20
+
21
+ Disables breakpoints or displays.
22
+
23
+ "disable" by itself shows this help
24
+ "disable breakpoints" disables all breakpoints.
25
+ "disable displays" disables all displays.
26
+
27
+ You can also specify a space separated list of breakpoint or display
28
+ numbers to disable only specific breakpoints or displays.
29
+ EOD
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,38 @@
1
+ require 'byebug/helpers/toggle'
2
+
3
+ module Byebug
4
+ #
5
+ # Reopens the +disable+ command to define the +breakpoints+ subcommand
6
+ #
7
+ class DisableCommand < Command
8
+ #
9
+ # Disables all or specific breakpoints
10
+ #
11
+ class BreakpointsSubcommand < Command
12
+ include Helpers::ToggleHelper
13
+
14
+ def regexp
15
+ /^\s* b(?:reakpoints)? (?:\s+ (.+))? \s*$/x
16
+ end
17
+
18
+ def execute
19
+ enable_disable_breakpoints('disable', @match[1])
20
+ end
21
+
22
+ def short_description
23
+ 'Disable all or specific breakpoints.'
24
+ end
25
+
26
+ def description
27
+ <<-EOD
28
+ dis[able] b[reakpoints][ <id1> <id2> .. <idn>]
29
+
30
+ #{short_description}
31
+
32
+ Give breakpoint numbers (separated by spaces) as arguments or no
33
+ argument at all if you want to disable every breakpoint.
34
+ EOD
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,39 @@
1
+ require 'byebug/helpers/toggle'
2
+
3
+ module Byebug
4
+ #
5
+ # Reopens the +disable+ command to define the +display+ subcommand
6
+ #
7
+ class DisableCommand < Command
8
+ #
9
+ # Enables all or specific displays
10
+ #
11
+ class DisplaySubcommand < Command
12
+ include Helpers::ToggleHelper
13
+
14
+ def regexp
15
+ /^\s* d(?:isplay)? (?:\s+ (.+))? \s*$/x
16
+ end
17
+
18
+ def execute
19
+ enable_disable_display('disable', @match[1])
20
+ end
21
+
22
+ def short_description
23
+ 'Disables expressions to be displayed when program stops.'
24
+ end
25
+
26
+ def description
27
+ <<-EOD
28
+ dis[able] d[isplay][ <id1> <id2> .. <idn>]
29
+
30
+ #{short_description}
31
+
32
+ Arguments are the code numbers of the expressions to disable. Do "info
33
+ display" to see the current list of code numbers. If no arguments are
34
+ specified, all displays are disabled.
35
+ EOD
36
+ end
37
+ end
38
+ end
39
+ end
@@ -2,34 +2,33 @@ require 'byebug/command'
2
2
 
3
3
  module Byebug
4
4
  #
5
- # Implements the functionality of adding custom expressions to be displayed
6
- # every time the debugger stops.
5
+ # Custom expressions to be displayed every time the debugger stops.
7
6
  #
8
- class AddDisplayCommand < Command
7
+ class DisplayCommand < Command
9
8
  self.allow_in_post_mortem = false
10
9
 
10
+ def self.always_run
11
+ 2
12
+ end
13
+
11
14
  def regexp
12
- /^\s* disp(?:lay)? \s+ (.+) \s*$/x
15
+ /^\s* disp(?:lay)? (?:\s+ (.+))? \s*$/x
13
16
  end
14
17
 
15
18
  def execute
16
- exp = @match[1]
17
- @state.display.push [true, exp]
18
- display_expression(exp)
19
- end
19
+ return print_display_expressions unless @match && @match[1]
20
20
 
21
- class << self
22
- def names
23
- %w(display)
24
- end
21
+ @state.display.push [true, @match[1]]
22
+ display_expression(@match[1])
23
+ end
25
24
 
26
- def description
27
- prettify <<-EOD
28
- disp[lay] <expression>
25
+ def description
26
+ <<-EOD
27
+ disp[lay][ <expression>]
29
28
 
30
- Add <expression> into display expression list.
31
- EOD
32
- end
29
+ If <expression> specified, adds <expression> into display expression
30
+ list. Otherwise, it lists all expressions.
31
+ EOD
33
32
  end
34
33
 
35
34
  private
@@ -40,39 +39,6 @@ module Byebug
40
39
  exp: exp,
41
40
  result: bb_warning_eval(exp).inspect)
42
41
  end
43
- end
44
-
45
- #
46
- # Displays the value of enabled expressions.
47
- #
48
- class DisplayCommand < Command
49
- self.allow_in_post_mortem = false
50
-
51
- def self.always_run
52
- 2
53
- end
54
-
55
- def regexp
56
- /^\s* disp(?:lay)? \s*$/x
57
- end
58
-
59
- def execute
60
- print_display_expressions
61
- end
62
-
63
- class << self
64
- def names
65
- %w(display)
66
- end
67
-
68
- def description
69
- prettify <<-EOD
70
- disp[lay] Display expression list.
71
- EOD
72
- end
73
- end
74
-
75
- private
76
42
 
77
43
  def print_display_expressions
78
44
  result = prc('display.result', @state.display) do |item, index|
@@ -83,6 +49,7 @@ module Byebug
83
49
  result: bb_warning_eval(expression).inspect }
84
50
  end
85
51
  end
52
+
86
53
  print result
87
54
  end
88
55
  end
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ require 'pathname'
4
+ require 'byebug/command'
5
+ require 'byebug/helpers/frame'
6
+ require 'byebug/helpers/parse'
7
+
8
+ module Byebug
9
+ #
10
+ # Move the current frame down in the backtrace.
11
+ #
12
+ class DownCommand < Command
13
+ include Helpers::FrameHelper
14
+ include Helpers::ParseHelper
15
+
16
+ def regexp
17
+ /^\s* down (?:\s+(\S+))? \s*$/x
18
+ end
19
+
20
+ def execute
21
+ pos, err = parse_steps(@match[1], 'Down')
22
+ return errmsg(err) unless pos
23
+
24
+ adjust_frame(-pos, false)
25
+
26
+ ListCommand.new(@state).execute if Setting[:autolist]
27
+ end
28
+
29
+ def description
30
+ <<-EOD
31
+ down[ count]
32
+
33
+ Move to a lower frame in the stack trace.
34
+
35
+ Use the "bt" command to find out where you want to go.
36
+ EOD
37
+ end
38
+ end
39
+ end
@@ -37,20 +37,14 @@ module Byebug
37
37
  system(cmd)
38
38
  end
39
39
 
40
- class << self
41
- def names
42
- %w(edit)
43
- end
44
-
45
- def description
46
- prettify <<-EOD
47
- edit[ file:lineno] Edit specified files.
48
-
49
- With no argument, edits file containing most recent line listed.
50
- Editing targets can also be specified to start editing at a specific
51
- line in a specific file.
52
- EOD
53
- end
40
+ def description
41
+ <<-EOD
42
+ edit[ file:lineno] Edit specified files.
43
+
44
+ With no argument, edits file containing most recent line listed. Editing
45
+ targets can also be specified to start editing at a specific line in a
46
+ specific file.
47
+ EOD
54
48
  end
55
49
  end
56
50
  end
@@ -0,0 +1,25 @@
1
+ require 'byebug/subcommands'
2
+
3
+ require 'byebug/commands/enable/breakpoints'
4
+ require 'byebug/commands/enable/display'
5
+
6
+ module Byebug
7
+ #
8
+ # Enabling custom display expressions or breakpoints.
9
+ #
10
+ class EnableCommand < Command
11
+ include Subcommands
12
+
13
+ def regexp
14
+ /^\s* en(?:able)? (?:\s+ (.+))? \s*$/x
15
+ end
16
+
17
+ def description
18
+ <<-EOD
19
+ en[able][[ b[reakpoints]| d[isplay])][ n1[ n2[ ...[ nn]]]]]
20
+
21
+ Enables breakpoints or displays.
22
+ EOD
23
+ end
24
+ end
25
+ end