byebug 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -2
- data/bin/byebug +2 -4
- data/ext/byebug/byebug.c +10 -10
- data/lib/byebug/command.rb +15 -9
- data/lib/byebug/commands/breakpoints.rb +4 -3
- data/lib/byebug/commands/enable.rb +57 -61
- data/lib/byebug/commands/eval.rb +35 -31
- data/lib/byebug/commands/frame.rb +24 -19
- data/lib/byebug/commands/info.rb +74 -95
- data/lib/byebug/commands/list.rb +3 -0
- data/lib/byebug/commands/set.rb +147 -158
- data/lib/byebug/commands/show.rb +46 -41
- data/lib/byebug/commands/trace.rb +6 -6
- data/lib/byebug/context.rb +1 -2
- data/lib/byebug/processor.rb +10 -7
- data/lib/byebug/version.rb +1 -1
- data/old_doc/byebug.texi +426 -461
- data/test/eval_test.rb +35 -29
- data/test/frame_test.rb +48 -47
- data/test/info_test.rb +4 -4
- data/test/list_test.rb +1 -4
- data/test/reload_test.rb +35 -30
- data/test/show_test.rb +4 -6
- data/test/source_test.rb +33 -30
- data/test/stepping_test.rb +0 -1
- data/test/support/test_dsl.rb +0 -4
- data/test/test_helper.rb +0 -5
- data/test/trace_test.rb +65 -69
- metadata +2 -3
- data/old_doc/byebug.html +0 -6178
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9879e1bf4c99c2ce971bb11d2d0d9e1be2ab6b3f
|
4
|
+
data.tar.gz: 5402c4b2c35821bb2a594dff94b2fe8f5928fa16
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 500afcaa81db3c20f1e36a691d4599d29feeafa0670e7b37e134bd2a9e5afa8f7812caaa85b147ac72b1b870552ff655ffe767e10e4dd07e13359cebcd903039
|
7
|
+
data.tar.gz: f8ac3188a9cd9520f8bd3d3b440ad5f9c29e4ec4feb5fd83236eaa4a43920c81a0fa72a47c5092898bab539fc3fcf1b99fb1d518646444d4d8f6eb2d3c658888
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,20 @@
|
|
1
|
-
##
|
1
|
+
## 1.0.2
|
2
2
|
|
3
|
-
*
|
3
|
+
* "autolist" and "autoeval" are default settings now
|
4
|
+
* Fixes bug which messed up the call-stack when manipulating backtrace
|
5
|
+
information and when nexting/stepping
|
6
|
+
|
7
|
+
|
8
|
+
## 1.0.1
|
9
|
+
|
10
|
+
* Corrected small bug preventing byebug from loading
|
4
11
|
|
5
12
|
|
6
13
|
## 1.0.0
|
7
14
|
|
8
15
|
* Green test suite
|
16
|
+
|
17
|
+
|
18
|
+
## 0.0.1
|
19
|
+
|
20
|
+
* Initial release
|
data/bin/byebug
CHANGED
@@ -292,15 +292,13 @@ end
|
|
292
292
|
|
293
293
|
opts = process_options(options)
|
294
294
|
begin
|
295
|
-
if not defined? Byebug::ARGV
|
296
|
-
Byebug::ARGV = ARGV.clone
|
297
|
-
end
|
295
|
+
Byebug::ARGV = ARGV.clone if not defined? Byebug::ARGV
|
298
296
|
byebug_path = File.expand_path($0)
|
299
297
|
if RUBY_PLATFORM =~ /mswin/
|
300
298
|
byebug_path += '.cmd' unless byebug_path =~ /\.cmd$/i
|
301
299
|
end
|
302
300
|
Byebug::RDEBUG_SCRIPT = byebug_path
|
303
|
-
Byebug::
|
301
|
+
Byebug::BYEBUG_BIN = __FILE__
|
304
302
|
Byebug::INITIAL_DIR = Dir.pwd
|
305
303
|
opts.parse! ARGV
|
306
304
|
rescue StandardError => e
|
data/ext/byebug/byebug.c
CHANGED
@@ -158,13 +158,13 @@ process_line_event(VALUE trace_point, void *data)
|
|
158
158
|
|
159
159
|
load_frame_info(
|
160
160
|
trace_point, &path, &lineno, &method_id, &defined_class, &binding, &self);
|
161
|
+
update_frame(context_object, RSTRING_PTR(path), FIX2INT(lineno), method_id,
|
162
|
+
defined_class, binding, self);
|
163
|
+
|
161
164
|
if (debug == Qtrue)
|
162
165
|
print_debug_info(
|
163
166
|
"line", path, lineno, method_id, defined_class, context->stack_size);
|
164
167
|
|
165
|
-
update_frame(context_object, RSTRING_PTR(path), FIX2INT(lineno), method_id,
|
166
|
-
defined_class, binding, self);
|
167
|
-
|
168
168
|
if (context->last_line != FIX2INT(lineno) || context->last_file == NULL ||
|
169
169
|
strcmp(context->last_file, RSTRING_PTR(path)))
|
170
170
|
{
|
@@ -228,12 +228,12 @@ process_return_event(VALUE trace_point, void *data)
|
|
228
228
|
|
229
229
|
load_frame_info(trace_point, &path, &lineno, &method_id, &defined_class,
|
230
230
|
&binding, &self);
|
231
|
+
pop_frame(context_object);
|
232
|
+
|
231
233
|
if (debug == Qtrue)
|
232
234
|
print_debug_info("return", path, lineno, method_id, defined_class,
|
233
235
|
context->stack_size);
|
234
|
-
|
235
236
|
//rb_funcall(context_object, idAtReturn, 2, path, lineno);
|
236
|
-
pop_frame(context_object);
|
237
237
|
|
238
238
|
cleanup(context);
|
239
239
|
}
|
@@ -252,13 +252,13 @@ process_call_event(VALUE trace_point, void *data)
|
|
252
252
|
|
253
253
|
load_frame_info(trace_point, &path, &lineno, &method_id, &defined_class,
|
254
254
|
&binding, &self);
|
255
|
+
push_frame(context_object, RSTRING_PTR(path), FIX2INT(lineno), method_id,
|
256
|
+
defined_class, binding, self);
|
257
|
+
|
255
258
|
if (debug == Qtrue)
|
256
259
|
print_debug_info("call", path, lineno, method_id, defined_class,
|
257
260
|
context->stack_size);
|
258
261
|
|
259
|
-
push_frame(context_object, RSTRING_PTR(path), FIX2INT(lineno), method_id,
|
260
|
-
defined_class, binding, self);
|
261
|
-
|
262
262
|
breakpoint = find_breakpoint_by_method(breakpoints, defined_class,
|
263
263
|
SYM2ID(method_id),
|
264
264
|
binding, self);
|
@@ -343,12 +343,12 @@ Byebug_setup_tracepoints(VALUE self)
|
|
343
343
|
rb_tracepoint_enable(tpLine);
|
344
344
|
|
345
345
|
tpReturn = rb_tracepoint_new(Qnil,
|
346
|
-
RUBY_EVENT_RETURN | RUBY_EVENT_C_RETURN | RUBY_EVENT_B_RETURN |
|
346
|
+
RUBY_EVENT_RETURN | RUBY_EVENT_C_RETURN | RUBY_EVENT_B_RETURN | RUBY_EVENT_END,
|
347
347
|
process_return_event, NULL);
|
348
348
|
rb_tracepoint_enable(tpReturn);
|
349
349
|
|
350
350
|
tpCall = rb_tracepoint_new(Qnil,
|
351
|
-
RUBY_EVENT_CALL | RUBY_EVENT_C_CALL | RUBY_EVENT_B_CALL,
|
351
|
+
RUBY_EVENT_CALL | RUBY_EVENT_C_CALL | RUBY_EVENT_B_CALL | RUBY_EVENT_CLASS,
|
352
352
|
process_call_event, NULL);
|
353
353
|
rb_tracepoint_enable(tpCall);
|
354
354
|
|
data/lib/byebug/command.rb
CHANGED
@@ -24,19 +24,26 @@ module Byebug
|
|
24
24
|
SubcmdStruct = Struct.new(:name, :min, :short_help, :long_help) unless
|
25
25
|
defined?(SubcmdStruct)
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
##
|
28
|
+
# Print list of subcmds
|
29
|
+
#
|
30
|
+
def print_subcmds(subcmds)
|
31
|
+
cmd_name = self.class.name[/Byebug::(.*)Command/, 1].downcase
|
32
|
+
errmsg "\"#{cmd_name}\" must be followed by the name of a subcommand.\n"
|
33
|
+
print "List of \"#{cmd_name}\" subcommands:\n"
|
34
|
+
for subcmd in subcmds do
|
32
35
|
print "#{cmd_name} #{subcmd.name} -- #{subcmd.short_help}\n"
|
33
36
|
end
|
34
37
|
end
|
35
38
|
|
36
39
|
include Columnize
|
37
40
|
|
38
|
-
|
39
|
-
#
|
41
|
+
##
|
42
|
+
# Find param in subcmds.
|
43
|
+
#
|
44
|
+
# @param is downcased and can be abbreviated to the minimum length listed in
|
45
|
+
# the subcommands.
|
46
|
+
#
|
40
47
|
def find(subcmds, param)
|
41
48
|
param.downcase!
|
42
49
|
for try_subcmd in subcmds do
|
@@ -55,7 +62,7 @@ module Byebug
|
|
55
62
|
|
56
63
|
DEF_OPTIONS = {
|
57
64
|
:allow_in_control => false,
|
58
|
-
:allow_in_post_mortem => false
|
65
|
+
:allow_in_post_mortem => false,
|
59
66
|
:event => true ,
|
60
67
|
:always_run => 0 ,
|
61
68
|
:unknown => false,
|
@@ -153,7 +160,6 @@ module Byebug
|
|
153
160
|
register_setting_var(:byebugtesting, false)
|
154
161
|
register_setting_var(:force_stepping, false)
|
155
162
|
register_setting_var(:full_path, true)
|
156
|
-
register_setting_var(:autolist, 1)
|
157
163
|
register_setting_var(:listsize, 10)
|
158
164
|
register_setting_var(:stack_trace_on_error, false)
|
159
165
|
register_setting_var(:tracing_plus, false)
|
@@ -81,15 +81,16 @@ module Byebug
|
|
81
81
|
end
|
82
82
|
b = Byebug.add_breakpoint brkpt_filename, line, expr
|
83
83
|
print "Created breakpoint #{b.id} at " \
|
84
|
-
"#{CommandProcessor.canonic_file(brkpt_filename)}:#{line.to_s}"
|
84
|
+
"#{CommandProcessor.canonic_file(brkpt_filename)}:#{line.to_s}\n"
|
85
85
|
unless syntax_valid?(expr)
|
86
|
-
errmsg
|
86
|
+
errmsg "Expression \"#{expr}\" syntactically incorrect; breakpoint" \
|
87
|
+
" disabled.\n"
|
87
88
|
b.enabled = false
|
88
89
|
end
|
89
90
|
else
|
90
91
|
method = line.intern
|
91
92
|
b = Byebug.add_breakpoint class_name, method, expr
|
92
|
-
print "Created breakpoint #{b.id} at #{class_name}::#{method.to_s}"
|
93
|
+
print "Created breakpoint #{b.id} at #{class_name}::#{method.to_s}\n"
|
93
94
|
end
|
94
95
|
end
|
95
96
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Byebug
|
2
|
+
|
2
3
|
# Mix-in module to assist in command parsing.
|
3
|
-
module EnableDisableFunctions
|
4
|
+
module EnableDisableFunctions
|
4
5
|
def enable_disable_breakpoints(is_enable, args)
|
5
6
|
breakpoints = Byebug.breakpoints.sort_by{|b| b.id }
|
6
7
|
largest = breakpoints.inject(0) do |tally, b|
|
@@ -14,7 +15,7 @@ module Byebug
|
|
14
15
|
pos = get_int(pos, "#{is_enable} breakpoints", 1, largest)
|
15
16
|
return nil unless pos
|
16
17
|
breakpoints.each do |b|
|
17
|
-
if b.id == pos
|
18
|
+
if b.id == pos
|
18
19
|
enabled = ("Enable" == is_enable)
|
19
20
|
if enabled
|
20
21
|
unless syntax_valid?(b.expr)
|
@@ -30,7 +31,7 @@ module Byebug
|
|
30
31
|
end
|
31
32
|
|
32
33
|
def enable_disable_display(is_enable, args)
|
33
|
-
if 0 == @state.display.size
|
34
|
+
if 0 == @state.display.size
|
34
35
|
errmsg "No display expressions have been set.\n"
|
35
36
|
return
|
36
37
|
end
|
@@ -43,25 +44,25 @@ module Byebug
|
|
43
44
|
|
44
45
|
end
|
45
46
|
|
46
|
-
class EnableCommand < Command
|
47
|
-
Subcommands =
|
47
|
+
class EnableCommand < Command
|
48
|
+
Subcommands =
|
48
49
|
[
|
49
|
-
['breakpoints', 2,
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
"
|
56
|
-
|
57
|
-
].map do |name, min, short_help, long_help|
|
50
|
+
['breakpoints', 2, 'Enable specified breakpoints',
|
51
|
+
'Give breakpoint numbers (separated by spaces) as arguments. This is ' \
|
52
|
+
'used to cancel the effect of the \"disable\" command.'],
|
53
|
+
['display', 2,
|
54
|
+
'Enable some expressions to be displayed when program stops',
|
55
|
+
'Arguments are the code numbers of the expressions to resume ' \
|
56
|
+
'displaying. Do \"info display\" to see the current list of code ' \
|
57
|
+
'numbers.'],
|
58
|
+
].map do |name, min, short_help, long_help|
|
58
59
|
SubcmdStruct.new(name, min, short_help, long_help)
|
59
60
|
end unless defined?(Subcommands)
|
60
61
|
|
61
62
|
def regexp
|
62
63
|
/^\s* en(?:able)? (?:\s+(.*))?$/ix
|
63
64
|
end
|
64
|
-
|
65
|
+
|
65
66
|
def execute
|
66
67
|
if not @match[1]
|
67
68
|
errmsg "\"enable\" must be followed \"display\", \"breakpoints\"" +
|
@@ -77,41 +78,38 @@ Do \"info display\" to see current list of code numbers."],
|
|
77
78
|
end
|
78
79
|
end
|
79
80
|
end
|
80
|
-
|
81
|
+
|
81
82
|
def enable_breakpoints(args)
|
82
83
|
enable_disable_breakpoints("Enable", args)
|
83
84
|
end
|
84
|
-
|
85
|
+
|
85
86
|
def enable_display(args)
|
86
87
|
enable_disable_display("Enable", args)
|
87
88
|
end
|
88
|
-
|
89
|
+
|
89
90
|
class << self
|
90
91
|
def help_command
|
91
92
|
'enable'
|
92
93
|
end
|
93
94
|
|
94
95
|
def help(args)
|
95
|
-
|
96
|
-
|
97
|
-
subcmd = Subcommands
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
if subcmd
|
102
|
-
|
103
|
-
str += "\n" + subcmd.long_help if subcmd.long_help
|
104
|
-
return str
|
105
|
-
else
|
106
|
-
return "Invalid 'enable' subcommand '#{args[1]}'."
|
107
|
-
end
|
96
|
+
# specific subcommand help
|
97
|
+
if args[1]
|
98
|
+
subcmd = find(Subcommands, args[1])
|
99
|
+
return "Invalid \"enable\" subcommand \"#{args[1]}\"." unless subcmd
|
100
|
+
|
101
|
+
str = subcmd.short_help + '.'
|
102
|
+
str += "\n" + subcmd.long_help if subcmd.long_help
|
103
|
+
return str
|
108
104
|
end
|
105
|
+
|
106
|
+
# general help
|
109
107
|
s = %{
|
110
108
|
Enable some things.
|
111
109
|
This is used to cancel the effect of the "disable" command.
|
112
|
-
--
|
110
|
+
--
|
113
111
|
List of enable subcommands:
|
114
|
-
--
|
112
|
+
--
|
115
113
|
}
|
116
114
|
for subcmd in Subcommands do
|
117
115
|
s += "enable #{subcmd.name} -- #{subcmd.short_help}\n"
|
@@ -121,23 +119,24 @@ Do \"info display\" to see current list of code numbers."],
|
|
121
119
|
end
|
122
120
|
end
|
123
121
|
|
124
|
-
class DisableCommand < Command
|
125
|
-
Subcommands =
|
122
|
+
class DisableCommand < Command
|
123
|
+
Subcommands =
|
126
124
|
[
|
127
|
-
['breakpoints', 1,
|
128
|
-
|
129
|
-
|
130
|
-
['display', 1,
|
131
|
-
|
132
|
-
Do \"info display\" to see current list of code
|
133
|
-
|
125
|
+
['breakpoints', 1, 'Disable some breakpoints',
|
126
|
+
'Arguments are breakpoint numbers with spaces in between. A disabled ' \
|
127
|
+
'breakpoint is not forgotten, but has no effect until reenabled.'],
|
128
|
+
['display', 1, 'Disable some display expressions when program stops',
|
129
|
+
'Arguments are the code numbers of the expressions to stop ' \
|
130
|
+
'displaying. Do \"info display\" to see the current list of code ' \
|
131
|
+
'numbers.'],
|
132
|
+
].map do |name, min, short_help, long_help|
|
134
133
|
SubcmdStruct.new(name, min, short_help, long_help)
|
135
134
|
end unless defined?(Subcommands)
|
136
135
|
|
137
136
|
def regexp
|
138
137
|
/^\s* dis(?:able)? (?:\s+(.*))?$/ix
|
139
138
|
end
|
140
|
-
|
139
|
+
|
141
140
|
def execute
|
142
141
|
if not @match[1]
|
143
142
|
errmsg "\"disable\" must be followed \"display\", \"breakpoints\"" +
|
@@ -153,43 +152,40 @@ Do \"info display\" to see current list of code numbers."],
|
|
153
152
|
end
|
154
153
|
end
|
155
154
|
end
|
156
|
-
|
155
|
+
|
157
156
|
def disable_breakpoints(args)
|
158
157
|
enable_disable_breakpoints("Disable", args)
|
159
158
|
end
|
160
|
-
|
159
|
+
|
161
160
|
def disable_display(args)
|
162
161
|
enable_disable_display("Disable", args)
|
163
162
|
end
|
164
|
-
|
163
|
+
|
165
164
|
class << self
|
166
165
|
def help_command
|
167
166
|
'disable'
|
168
167
|
end
|
169
168
|
|
170
169
|
def help(args)
|
171
|
-
|
172
|
-
|
173
|
-
subcmd = Subcommands
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
if subcmd
|
178
|
-
|
179
|
-
str += "\n" + subcmd.long_help if subcmd.long_help
|
180
|
-
return str
|
181
|
-
else
|
182
|
-
return "Invalid 'disable' subcommand '#{args[1]}'."
|
183
|
-
end
|
170
|
+
# specific subcommand help
|
171
|
+
if args[1]
|
172
|
+
subcmd = find(Subcommands, args[1])
|
173
|
+
return "Invalid \"disable\" subcommand \"#{args[1]}\"." unless subcmd
|
174
|
+
|
175
|
+
str = subcmd.short_help + '.'
|
176
|
+
str += "\n" + subcmd.long_help if subcmd.long_help
|
177
|
+
return str
|
184
178
|
end
|
179
|
+
|
180
|
+
# general help
|
185
181
|
s = %{
|
186
182
|
Disable some things.
|
187
183
|
|
188
184
|
A disabled item is not forgotten, but has no effect until reenabled.
|
189
185
|
Use the "enable" command to have it take effect again.
|
190
|
-
--
|
186
|
+
--
|
191
187
|
List of disable subcommands:
|
192
|
-
--
|
188
|
+
--
|
193
189
|
}
|
194
190
|
for subcmd in Subcommands do
|
195
191
|
s += "disable #{subcmd.name} -- #{subcmd.short_help}\n"
|
data/lib/byebug/commands/eval.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module Byebug
|
2
|
-
|
2
|
+
|
3
|
+
module EvalFunctions
|
3
4
|
def run_with_binding
|
4
5
|
binding = @state.context ? get_binding : TOPLEVEL_BINDING
|
5
6
|
$__dbg_interface = @state.interface
|
@@ -21,10 +22,10 @@ module Byebug
|
|
21
22
|
$__dbg_interface = nil
|
22
23
|
end
|
23
24
|
end
|
24
|
-
|
25
|
+
|
25
26
|
class EvalCommand < Command # :nodoc:
|
26
27
|
self.allow_in_control = true
|
27
|
-
|
28
|
+
|
28
29
|
register_setting_get(:autoeval) do
|
29
30
|
EvalCommand.unknown
|
30
31
|
end
|
@@ -32,11 +33,14 @@ module Byebug
|
|
32
33
|
EvalCommand.unknown = value
|
33
34
|
end
|
34
35
|
|
36
|
+
# Set default value
|
37
|
+
Command.settings[:autoeval] = 1
|
38
|
+
|
35
39
|
def match(input)
|
36
40
|
@input = input
|
37
41
|
super
|
38
42
|
end
|
39
|
-
|
43
|
+
|
40
44
|
def regexp
|
41
45
|
/^\s*(p|e(?:val)?)\s+/
|
42
46
|
end
|
@@ -44,7 +48,7 @@ module Byebug
|
|
44
48
|
def execute
|
45
49
|
expr = @match ? @match.post_match : @input
|
46
50
|
run_with_binding do |b|
|
47
|
-
print "
|
51
|
+
print "#{debug_eval(expr, b).inspect}\n"
|
48
52
|
end
|
49
53
|
end
|
50
54
|
|
@@ -56,22 +60,22 @@ module Byebug
|
|
56
60
|
def help(cmd)
|
57
61
|
if cmd == 'p'
|
58
62
|
%{
|
59
|
-
|
60
|
-
|
63
|
+
p expression\tevaluate expression and print its value
|
64
|
+
}
|
61
65
|
else
|
62
66
|
%{
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
+
e[val] expression\tevaluate expression and print its value,
|
68
|
+
\t\t\talias for p.
|
69
|
+
* NOTE - to turn on autoeval, use 'set autoeval'
|
70
|
+
}
|
67
71
|
end
|
68
72
|
end
|
69
73
|
end
|
70
74
|
end
|
71
75
|
|
72
|
-
class PPCommand < Command
|
76
|
+
class PPCommand < Command
|
73
77
|
self.allow_in_control = true
|
74
|
-
|
78
|
+
|
75
79
|
def regexp
|
76
80
|
/^\s*pp\s+/
|
77
81
|
end
|
@@ -82,7 +86,7 @@ module Byebug
|
|
82
86
|
PP.pp(debug_eval(@match.post_match, b), out)
|
83
87
|
end
|
84
88
|
print out.string
|
85
|
-
rescue
|
89
|
+
rescue
|
86
90
|
out.puts $!.message
|
87
91
|
end
|
88
92
|
|
@@ -93,15 +97,15 @@ module Byebug
|
|
93
97
|
|
94
98
|
def help(cmd)
|
95
99
|
%{
|
96
|
-
|
97
|
-
|
100
|
+
pp expression\tevaluate expression and pretty-print its value
|
101
|
+
}
|
98
102
|
end
|
99
103
|
end
|
100
104
|
end
|
101
105
|
|
102
|
-
class PutLCommand < Command
|
106
|
+
class PutLCommand < Command
|
103
107
|
self.allow_in_control = true
|
104
|
-
|
108
|
+
|
105
109
|
def regexp
|
106
110
|
/^\s*putl\s+/
|
107
111
|
end
|
@@ -112,13 +116,13 @@ module Byebug
|
|
112
116
|
vals = debug_eval(@match.post_match, b)
|
113
117
|
if vals.is_a?(Array)
|
114
118
|
vals = vals.map{|item| item.to_s}
|
115
|
-
print "
|
119
|
+
print "#{columnize(vals, self.class.settings[:width])}\n"
|
116
120
|
else
|
117
121
|
PP.pp(vals, out)
|
118
122
|
print out.string
|
119
123
|
end
|
120
124
|
end
|
121
|
-
rescue
|
125
|
+
rescue
|
122
126
|
out.puts $!.message
|
123
127
|
end
|
124
128
|
|
@@ -129,17 +133,17 @@ module Byebug
|
|
129
133
|
|
130
134
|
def help(cmd)
|
131
135
|
%{
|
132
|
-
|
133
|
-
|
136
|
+
putl expression\tevaluate expression, an array, and columnize its value
|
137
|
+
}
|
134
138
|
end
|
135
139
|
end
|
136
140
|
end
|
137
|
-
|
138
|
-
class PSCommand < Command
|
141
|
+
|
142
|
+
class PSCommand < Command
|
139
143
|
self.allow_in_control = true
|
140
|
-
|
144
|
+
|
141
145
|
include EvalFunctions
|
142
|
-
|
146
|
+
|
143
147
|
def regexp
|
144
148
|
/^\s*ps\s+/
|
145
149
|
end
|
@@ -150,13 +154,13 @@ module Byebug
|
|
150
154
|
vals = debug_eval(@match.post_match, b)
|
151
155
|
if vals.is_a?(Array)
|
152
156
|
vals = vals.map{|item| item.to_s}
|
153
|
-
print "
|
157
|
+
print "#{columnize(vals.sort!, self.class.settings[:width])}\n"
|
154
158
|
else
|
155
159
|
PP.pp(vals, out)
|
156
160
|
print out.string
|
157
161
|
end
|
158
162
|
end
|
159
|
-
rescue
|
163
|
+
rescue
|
160
164
|
out.puts $!.message
|
161
165
|
end
|
162
166
|
|
@@ -167,10 +171,10 @@ module Byebug
|
|
167
171
|
|
168
172
|
def help(cmd)
|
169
173
|
%{
|
170
|
-
|
171
|
-
|
174
|
+
ps expression\tevaluate expression, an array, sort and columnize its value
|
175
|
+
}
|
172
176
|
end
|
173
177
|
end
|
174
178
|
end
|
175
|
-
|
179
|
+
|
176
180
|
end
|