byebug 4.0.5 → 5.0.0

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