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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +72 -34
- data/CONTRIBUTING.md +26 -31
- data/README.md +3 -3
- data/lib/byebug/breakpoint.rb +2 -1
- data/lib/byebug/command.rb +27 -49
- data/lib/byebug/commands/break.rb +21 -15
- data/lib/byebug/commands/catch.rb +9 -15
- data/lib/byebug/commands/condition.rb +12 -15
- data/lib/byebug/commands/continue.rb +8 -11
- data/lib/byebug/commands/delete.rb +9 -12
- data/lib/byebug/commands/disable.rb +32 -0
- data/lib/byebug/commands/disable/breakpoints.rb +38 -0
- data/lib/byebug/commands/disable/display.rb +39 -0
- data/lib/byebug/commands/display.rb +18 -51
- data/lib/byebug/commands/down.rb +39 -0
- data/lib/byebug/commands/edit.rb +8 -14
- data/lib/byebug/commands/enable.rb +25 -0
- data/lib/byebug/commands/enable/breakpoints.rb +38 -0
- data/lib/byebug/commands/enable/display.rb +39 -0
- data/lib/byebug/commands/eval.rb +10 -192
- data/lib/byebug/commands/finish.rb +11 -12
- data/lib/byebug/commands/frame.rb +17 -182
- data/lib/byebug/commands/help.rb +18 -18
- data/lib/byebug/commands/history.rb +9 -10
- data/lib/byebug/commands/info.rb +17 -190
- data/lib/byebug/commands/info/args.rb +39 -0
- data/lib/byebug/commands/info/breakpoints.rb +59 -0
- data/lib/byebug/commands/info/catch.rb +39 -0
- data/lib/byebug/commands/info/display.rb +42 -0
- data/lib/byebug/commands/info/file.rb +81 -0
- data/lib/byebug/commands/info/line.rb +31 -0
- data/lib/byebug/commands/info/program.rb +51 -0
- data/lib/byebug/commands/interrupt.rb +5 -9
- data/lib/byebug/commands/irb.rb +5 -9
- data/lib/byebug/commands/kill.rb +6 -12
- data/lib/byebug/commands/list.rb +47 -19
- data/lib/byebug/commands/method.rb +8 -14
- data/lib/byebug/commands/next.rb +36 -0
- data/lib/byebug/commands/pp.rb +41 -0
- data/lib/byebug/commands/pry.rb +5 -9
- data/lib/byebug/commands/ps.rb +44 -0
- data/lib/byebug/commands/putl.rb +43 -0
- data/lib/byebug/commands/quit.rb +8 -12
- data/lib/byebug/commands/restart.rb +6 -12
- data/lib/byebug/commands/save.rb +30 -39
- data/lib/byebug/commands/set.rb +19 -21
- data/lib/byebug/commands/show.rb +10 -16
- data/lib/byebug/commands/source.rb +6 -12
- data/lib/byebug/commands/step.rb +36 -0
- data/lib/byebug/commands/thread.rb +13 -130
- data/lib/byebug/commands/thread/current.rb +35 -0
- data/lib/byebug/commands/thread/list.rb +41 -0
- data/lib/byebug/commands/thread/resume.rb +45 -0
- data/lib/byebug/commands/thread/stop.rb +41 -0
- data/lib/byebug/commands/thread/switch.rb +43 -0
- data/lib/byebug/commands/tracevar.rb +8 -14
- data/lib/byebug/commands/undisplay.rb +12 -15
- data/lib/byebug/commands/untracevar.rb +5 -11
- data/lib/byebug/commands/up.rb +39 -0
- data/lib/byebug/commands/var.rb +15 -94
- data/lib/byebug/commands/var/all.rb +37 -0
- data/lib/byebug/commands/var/const.rb +38 -0
- data/lib/byebug/commands/var/global.rb +33 -0
- data/lib/byebug/commands/var/instance.rb +35 -0
- data/lib/byebug/commands/var/local.rb +35 -0
- data/lib/byebug/commands/where.rb +47 -0
- data/lib/byebug/core.rb +10 -0
- data/lib/byebug/helpers/eval.rb +47 -0
- data/lib/byebug/helpers/file.rb +46 -0
- data/lib/byebug/helpers/frame.rb +76 -0
- data/lib/byebug/helpers/parse.rb +74 -0
- data/lib/byebug/helpers/string.rb +24 -0
- data/lib/byebug/helpers/thread.rb +53 -0
- data/lib/byebug/helpers/toggle.rb +56 -0
- data/lib/byebug/helpers/var.rb +45 -0
- data/lib/byebug/history.rb +2 -4
- data/lib/byebug/interface.rb +5 -3
- data/lib/byebug/interfaces/local_interface.rb +3 -1
- data/lib/byebug/interfaces/remote_interface.rb +3 -1
- data/lib/byebug/interfaces/test_interface.rb +6 -2
- data/lib/byebug/printers/plain.rb +1 -1
- data/lib/byebug/processors/command_processor.rb +9 -11
- data/lib/byebug/processors/control_command_processor.rb +1 -1
- data/lib/byebug/remote.rb +3 -0
- data/lib/byebug/runner.rb +5 -3
- data/lib/byebug/setting.rb +2 -18
- data/lib/byebug/settings/savefile.rb +21 -0
- data/lib/byebug/states/regular_state.rb +15 -6
- data/lib/byebug/subcommand_list.rb +33 -0
- data/lib/byebug/subcommands.rb +53 -0
- data/lib/byebug/version.rb +1 -1
- metadata +45 -6
- data/lib/byebug/commands/enable_disable.rb +0 -132
- data/lib/byebug/commands/stepping.rb +0 -75
- data/lib/byebug/helper.rb +0 -131
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'byebug/helpers/toggle'
|
2
|
+
|
3
|
+
module Byebug
|
4
|
+
#
|
5
|
+
# Reopens the +enable+ command to define the +breakpoints+ subcommand
|
6
|
+
#
|
7
|
+
class EnableCommand < Command
|
8
|
+
#
|
9
|
+
# Enables 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('enable', @match[1])
|
20
|
+
end
|
21
|
+
|
22
|
+
def short_description
|
23
|
+
'Disable all or specific breakpoints'
|
24
|
+
end
|
25
|
+
|
26
|
+
def description
|
27
|
+
<<-EOD
|
28
|
+
en[able] b[reakpoints][ <ids>]
|
29
|
+
|
30
|
+
#{short_description}
|
31
|
+
|
32
|
+
Give breakpoint numbers (separated by spaces) as arguments or no
|
33
|
+
argument at all if you want to enable 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 +enable+ command to define the +display+ subcommand
|
6
|
+
#
|
7
|
+
class EnableCommand < 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('enable', @match[1])
|
20
|
+
end
|
21
|
+
|
22
|
+
def short_description
|
23
|
+
'Enables expressions to be displayed when program stops.'
|
24
|
+
end
|
25
|
+
|
26
|
+
def description
|
27
|
+
<<-EOD
|
28
|
+
en[able] d[isplay][ <id1> <id2> .. <idn>]
|
29
|
+
|
30
|
+
#{short_description}
|
31
|
+
|
32
|
+
Arguments are the code numbers of the expressions to enable. Do "info
|
33
|
+
display" to see the current list of code numbers. If no arguments are
|
34
|
+
specified, all displays are enabled.
|
35
|
+
EOD
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/byebug/commands/eval.rb
CHANGED
@@ -1,60 +1,13 @@
|
|
1
|
-
require 'byebug/command'
|
2
|
-
|
3
1
|
require 'English'
|
4
|
-
require '
|
2
|
+
require 'byebug/command'
|
3
|
+
require 'byebug/helpers/eval'
|
5
4
|
|
6
5
|
module Byebug
|
7
|
-
#
|
8
|
-
# Utilities used by the eval command
|
9
|
-
#
|
10
|
-
module EvalFunctions
|
11
|
-
#
|
12
|
-
# Run block temporarily ignoring all TracePoint events.
|
13
|
-
#
|
14
|
-
# Used to evaluate stuff within Byebug's prompt. Otherwise, any code
|
15
|
-
# creating new threads won't be properly evaluated because new threads will
|
16
|
-
# get blocked by byebug's main thread.
|
17
|
-
#
|
18
|
-
def allowing_other_threads
|
19
|
-
Byebug.unlock
|
20
|
-
res = yield
|
21
|
-
Byebug.lock
|
22
|
-
res
|
23
|
-
end
|
24
|
-
|
25
|
-
#
|
26
|
-
# Get current binding and yield it to the given block
|
27
|
-
#
|
28
|
-
def run_with_binding
|
29
|
-
binding = get_binding
|
30
|
-
yield binding
|
31
|
-
end
|
32
|
-
|
33
|
-
#
|
34
|
-
# Evaluate +expression+ using +binding+
|
35
|
-
#
|
36
|
-
# @param binding [Binding] Context where to evaluate the expression
|
37
|
-
# @param expression [String] Expression to evaluation
|
38
|
-
# @param stack_on_error [Boolean] Whether to show a stack trace on error.
|
39
|
-
#
|
40
|
-
def eval_with_setting(binding, expression, stack_on_error)
|
41
|
-
allowing_other_threads do
|
42
|
-
if stack_on_error
|
43
|
-
bb_eval(expression, binding)
|
44
|
-
else
|
45
|
-
bb_warning_eval(expression, binding)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
6
|
#
|
52
7
|
# Evaluation of expressions from byebug's prompt.
|
53
8
|
#
|
54
9
|
class EvalCommand < Command
|
55
|
-
include
|
56
|
-
|
57
|
-
self.allow_in_control = true
|
10
|
+
include Helpers::EvalHelper
|
58
11
|
|
59
12
|
def match(input)
|
60
13
|
@input = input
|
@@ -76,150 +29,15 @@ module Byebug
|
|
76
29
|
puts "#{$ERROR_INFO.class} Exception: #{$ERROR_INFO.message}"
|
77
30
|
end
|
78
31
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
def description
|
85
|
-
prettify <<-EOD
|
86
|
-
e[val] <expression>
|
87
|
-
|
88
|
-
Evaluates <expression> and prints its value.
|
89
|
-
|
90
|
-
* NOTE - unknown input is automatically evaluated, to turn this off
|
91
|
-
use 'set noautoeval'.
|
92
|
-
EOD
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
#
|
98
|
-
# Evaluation and pretty printing from byebug's prompt.
|
99
|
-
#
|
100
|
-
class PPCommand < Command
|
101
|
-
include EvalFunctions
|
102
|
-
|
103
|
-
self.allow_in_control = true
|
104
|
-
|
105
|
-
def regexp
|
106
|
-
/^\s* pp \s+/x
|
107
|
-
end
|
108
|
-
|
109
|
-
def execute
|
110
|
-
out = StringIO.new
|
111
|
-
run_with_binding do |b|
|
112
|
-
if Setting[:stack_on_error]
|
113
|
-
PP.pp(bb_eval(@match.post_match, b), out)
|
114
|
-
else
|
115
|
-
PP.pp(bb_warning_eval(@match.post_match, b), out)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
puts out.string
|
119
|
-
rescue
|
120
|
-
out.puts $ERROR_INFO.message
|
121
|
-
end
|
122
|
-
|
123
|
-
class << self
|
124
|
-
def names
|
125
|
-
%w(pp)
|
126
|
-
end
|
127
|
-
|
128
|
-
def description
|
129
|
-
prettify <<-EOD
|
130
|
-
pp <expression>
|
32
|
+
def description
|
33
|
+
<<-EOD
|
34
|
+
e[val] <expression>
|
131
35
|
|
132
|
-
|
133
|
-
EOD
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
36
|
+
Evaluates <expression> and prints its value.
|
137
37
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
class PutLCommand < Command
|
142
|
-
include EvalFunctions
|
143
|
-
include Columnize
|
144
|
-
|
145
|
-
self.allow_in_control = true
|
146
|
-
|
147
|
-
def regexp
|
148
|
-
/^\s* putl \s+/x
|
149
|
-
end
|
150
|
-
|
151
|
-
def execute
|
152
|
-
out = StringIO.new
|
153
|
-
run_with_binding do |b|
|
154
|
-
res = eval_with_setting(b, @match.post_match, Setting[:stack_on_error])
|
155
|
-
|
156
|
-
if res.is_a?(Array)
|
157
|
-
puts "#{columnize(res.map(&:to_s), Setting[:width])}"
|
158
|
-
else
|
159
|
-
PP.pp(res, out)
|
160
|
-
puts out.string
|
161
|
-
end
|
162
|
-
end
|
163
|
-
rescue
|
164
|
-
out.puts $ERROR_INFO.message
|
165
|
-
end
|
166
|
-
|
167
|
-
class << self
|
168
|
-
def names
|
169
|
-
%w(putl)
|
170
|
-
end
|
171
|
-
|
172
|
-
def description
|
173
|
-
prettify <<-EOD
|
174
|
-
putl <expression>
|
175
|
-
|
176
|
-
Evaluates <expression>, an array, and columnize its value.
|
177
|
-
EOD
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
#
|
183
|
-
# Evaluation, pretty printing, columnizing and sorting from byebug's prompt
|
184
|
-
#
|
185
|
-
class PSCommand < Command
|
186
|
-
include EvalFunctions
|
187
|
-
include Columnize
|
188
|
-
|
189
|
-
self.allow_in_control = true
|
190
|
-
|
191
|
-
def regexp
|
192
|
-
/^\s* ps \s+/x
|
193
|
-
end
|
194
|
-
|
195
|
-
def execute
|
196
|
-
out = StringIO.new
|
197
|
-
run_with_binding do |b|
|
198
|
-
res = eval_with_setting(b, @match.post_match, Setting[:stack_on_error])
|
199
|
-
|
200
|
-
if res.is_a?(Array)
|
201
|
-
puts "#{columnize(res.map(&:to_s).sort!, Setting[:width])}"
|
202
|
-
else
|
203
|
-
PP.pp(res, out)
|
204
|
-
puts out.string
|
205
|
-
end
|
206
|
-
end
|
207
|
-
rescue
|
208
|
-
out.puts $ERROR_INFO.message
|
209
|
-
end
|
210
|
-
|
211
|
-
class << self
|
212
|
-
def names
|
213
|
-
%w(ps)
|
214
|
-
end
|
215
|
-
|
216
|
-
def description
|
217
|
-
prettify <<-EOD
|
218
|
-
ps <expression>
|
219
|
-
|
220
|
-
Evaluates <expression>, an array, sort and columnize its value.
|
221
|
-
EOD
|
222
|
-
end
|
38
|
+
* NOTE - unknown input is automatically evaluated, to turn this off use
|
39
|
+
'set noautoeval'.
|
40
|
+
EOD
|
223
41
|
end
|
224
42
|
end
|
225
43
|
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
|
# Allows the user to continue execution until certain frames are finished.
|
8
9
|
#
|
9
10
|
class FinishCommand < Command
|
11
|
+
include Helpers::ParseHelper
|
12
|
+
|
10
13
|
self.allow_in_post_mortem = false
|
11
14
|
|
12
15
|
def regexp
|
@@ -28,20 +31,16 @@ module Byebug
|
|
28
31
|
@state.proceed
|
29
32
|
end
|
30
33
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
34
|
+
def description
|
35
|
+
<<-EOD
|
36
|
+
fin[ish][ n_frames]
|
35
37
|
|
36
|
-
|
37
|
-
prettify <<-EOD
|
38
|
-
fin[ish][ n_frames] Execute until frame returns.
|
38
|
+
Execute until frame returns.
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
end
|
40
|
+
If no number is given, we run until the current frame returns. If a
|
41
|
+
number of frames `n_frames` is given, then we run until `n_frames`
|
42
|
+
return from the current position.
|
43
|
+
EOD
|
45
44
|
end
|
46
45
|
end
|
47
46
|
end
|
@@ -1,177 +1,17 @@
|
|
1
|
-
require 'byebug/command'
|
2
|
-
|
3
1
|
# encoding: utf-8
|
4
2
|
|
5
3
|
require 'pathname'
|
4
|
+
require 'byebug/command'
|
5
|
+
require 'byebug/helpers/frame'
|
6
|
+
require 'byebug/helpers/parse'
|
6
7
|
|
7
8
|
module Byebug
|
8
|
-
#
|
9
|
-
# Mixin to assist command parsing
|
10
|
-
#
|
11
|
-
module FrameFunctions
|
12
|
-
def switch_to_frame(frame_no)
|
13
|
-
frame_no >= 0 ? frame_no : @state.context.stack_size + frame_no
|
14
|
-
end
|
15
|
-
|
16
|
-
def navigate_to_frame(jump_no)
|
17
|
-
return if jump_no == 0
|
18
|
-
total_jumps, current_jumps, new_pos = jump_no.abs, 0, @state.frame
|
19
|
-
step = jump_no / total_jumps # +1 (up) or -1 (down)
|
20
|
-
|
21
|
-
loop do
|
22
|
-
new_pos += step
|
23
|
-
break if new_pos < 0 || new_pos >= @state.context.stack_size
|
24
|
-
|
25
|
-
next if @state.c_frame?(new_pos)
|
26
|
-
|
27
|
-
current_jumps += 1
|
28
|
-
break if current_jumps == total_jumps
|
29
|
-
end
|
30
|
-
new_pos
|
31
|
-
end
|
32
|
-
|
33
|
-
def adjust_frame(frame, absolute)
|
34
|
-
if absolute
|
35
|
-
abs_frame = switch_to_frame(frame)
|
36
|
-
return errmsg(pr('frame.errors.c_frame')) if @state.c_frame?(abs_frame)
|
37
|
-
else
|
38
|
-
abs_frame = navigate_to_frame(frame)
|
39
|
-
end
|
40
|
-
|
41
|
-
if abs_frame >= @state.context.stack_size
|
42
|
-
return errmsg(pr('frame.errors.too_low'))
|
43
|
-
elsif abs_frame < 0
|
44
|
-
return errmsg(pr('frame.errors.too_high'))
|
45
|
-
end
|
46
|
-
|
47
|
-
@state.frame = abs_frame
|
48
|
-
@state.file = @state.context.frame_file(@state.frame)
|
49
|
-
@state.line = @state.context.frame_line(@state.frame)
|
50
|
-
@state.prev_line = nil
|
51
|
-
|
52
|
-
ListCommand.new(@state).execute if Setting[:autolist]
|
53
|
-
end
|
54
|
-
|
55
|
-
def get_pr_arguments(frame_no)
|
56
|
-
file = @state.frame_file(frame_no)
|
57
|
-
line = @state.frame_line(frame_no)
|
58
|
-
call = @state.frame_call(frame_no)
|
59
|
-
mark = @state.frame_mark(frame_no)
|
60
|
-
pos = @state.frame_pos(frame_no)
|
61
|
-
|
62
|
-
{ mark: mark, pos: pos, call: call, file: file, line: line }
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
#
|
67
|
-
# Show current backtrace.
|
68
|
-
#
|
69
|
-
class WhereCommand < Command
|
70
|
-
include FrameFunctions
|
71
|
-
|
72
|
-
def regexp
|
73
|
-
/^\s* (?:w(?:here)?|bt|backtrace) \s*$/x
|
74
|
-
end
|
75
|
-
|
76
|
-
def execute
|
77
|
-
print_backtrace
|
78
|
-
end
|
79
|
-
|
80
|
-
class << self
|
81
|
-
def names
|
82
|
-
%w(where backtrace bt)
|
83
|
-
end
|
84
|
-
|
85
|
-
def description
|
86
|
-
prettify <<-EOD
|
87
|
-
w[here]|bt|backtrace Display stack frames.
|
88
|
-
|
89
|
-
Print the entire stack frame. Each frame is numbered; the most recent
|
90
|
-
frame is 0. A frame number can be referred to in the "frame" command;
|
91
|
-
"up" and "down" add or subtract respectively to frame numbers shown.
|
92
|
-
The position of the current frame is marked with -->. C-frames hang
|
93
|
-
from their most immediate Ruby frame to indicate that they are not
|
94
|
-
navigable.
|
95
|
-
EOD
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
private
|
100
|
-
|
101
|
-
def print_backtrace
|
102
|
-
bt = prc('frame.line', (0...@state.context.stack_size)) do |_, index|
|
103
|
-
get_pr_arguments(index)
|
104
|
-
end
|
105
|
-
|
106
|
-
print(bt)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
#
|
111
|
-
# Move the current frame up in the backtrace.
|
112
|
-
#
|
113
|
-
class UpCommand < Command
|
114
|
-
include FrameFunctions
|
115
|
-
|
116
|
-
def regexp
|
117
|
-
/^\s* u(?:p)? (?:\s+(\S+))? \s*$/x
|
118
|
-
end
|
119
|
-
|
120
|
-
def execute
|
121
|
-
pos, err = parse_steps(@match[1], 'Up')
|
122
|
-
return errmsg(err) unless pos
|
123
|
-
|
124
|
-
adjust_frame(pos, false)
|
125
|
-
end
|
126
|
-
|
127
|
-
class << self
|
128
|
-
def names
|
129
|
-
%w(up)
|
130
|
-
end
|
131
|
-
|
132
|
-
def description
|
133
|
-
prettify <<-EOD
|
134
|
-
up[ count] Move to higher frame.
|
135
|
-
EOD
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
#
|
141
|
-
# Move the current frame down in the backtrace.
|
142
|
-
#
|
143
|
-
class DownCommand < Command
|
144
|
-
include FrameFunctions
|
145
|
-
|
146
|
-
def regexp
|
147
|
-
/^\s* down (?:\s+(\S+))? \s*$/x
|
148
|
-
end
|
149
|
-
|
150
|
-
def execute
|
151
|
-
pos, err = parse_steps(@match[1], 'Down')
|
152
|
-
return errmsg(err) unless pos
|
153
|
-
|
154
|
-
adjust_frame(-pos, false)
|
155
|
-
end
|
156
|
-
|
157
|
-
class << self
|
158
|
-
def names
|
159
|
-
%w(down)
|
160
|
-
end
|
161
|
-
|
162
|
-
def description
|
163
|
-
prettify <<-EOD
|
164
|
-
down[ count] Move to lower frame.
|
165
|
-
EOD
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
9
|
#
|
171
10
|
# Move to specific frames in the backtrace.
|
172
11
|
#
|
173
12
|
class FrameCommand < Command
|
174
|
-
include
|
13
|
+
include Helpers::FrameHelper
|
14
|
+
include Helpers::ParseHelper
|
175
15
|
|
176
16
|
def regexp
|
177
17
|
/^\s* f(?:rame)? (?:\s+(\S+))? \s*$/x
|
@@ -189,27 +29,22 @@ module Byebug
|
|
189
29
|
adjust_frame(pos, true)
|
190
30
|
end
|
191
31
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
end
|
32
|
+
def description
|
33
|
+
<<-EOD
|
34
|
+
f[rame][ frame-number]
|
196
35
|
|
197
|
-
|
198
|
-
|
199
|
-
f[rame][ frame-number]
|
36
|
+
Move the current frame to the specified frame number, or the 0 if no
|
37
|
+
frame-number has been given.
|
200
38
|
|
201
|
-
|
202
|
-
|
39
|
+
A negative number indicates position from the other end, so "frame -1"
|
40
|
+
moves to the oldest frame, and "frame 0" moves to the newest frame.
|
203
41
|
|
204
|
-
|
205
|
-
|
206
|
-
|
42
|
+
Without an argument, the command prints the current stack frame. Since
|
43
|
+
the current position is redisplayed, it may trigger a resyncronization
|
44
|
+
if there is a front end also watching over things.
|
207
45
|
|
208
|
-
|
209
|
-
|
210
|
-
if there is a front end also watching over things.
|
211
|
-
EOD
|
212
|
-
end
|
46
|
+
Use the "bt" command to find out where you want to go.
|
47
|
+
EOD
|
213
48
|
end
|
214
49
|
end
|
215
50
|
end
|