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
data/test/eval_test.rb
CHANGED
@@ -1,62 +1,68 @@
|
|
1
1
|
require_relative 'test_helper'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe 'Eval Command' do
|
4
4
|
include TestDsl
|
5
5
|
|
6
|
-
it
|
6
|
+
it 'must evaluate an expression' do
|
7
7
|
enter 'eval 3 + 2'
|
8
8
|
debug_file 'eval'
|
9
|
-
check_output_includes
|
9
|
+
check_output_includes '5'
|
10
10
|
end
|
11
11
|
|
12
|
-
it
|
12
|
+
it 'must work with shortcut' do
|
13
13
|
enter 'e 3 + 2'
|
14
14
|
debug_file 'eval'
|
15
|
-
check_output_includes
|
15
|
+
check_output_includes '5'
|
16
16
|
end
|
17
17
|
|
18
|
-
it
|
18
|
+
it 'must work with another syntax' do
|
19
19
|
enter 'p 3 + 2'
|
20
20
|
debug_file 'eval'
|
21
|
-
check_output_includes
|
21
|
+
check_output_includes '5'
|
22
22
|
end
|
23
23
|
|
24
|
-
describe
|
25
|
-
|
24
|
+
describe 'autoeval' do
|
25
|
+
it 'must be set by default' do
|
26
|
+
enter '[5,6,7].inject(&:+)'
|
27
|
+
debug_file 'eval'
|
28
|
+
check_output_includes '18'
|
29
|
+
end
|
26
30
|
|
27
|
-
it
|
28
|
-
enter 'set
|
31
|
+
it 'can be turned off and back on' do
|
32
|
+
enter 'set noautoeval', '[5,6,7].inject(&:+)',
|
33
|
+
'set autoeval', '[1,2,3].inject(&:+)'
|
29
34
|
debug_file 'eval'
|
30
|
-
|
35
|
+
check_output_doesnt_include '18'
|
36
|
+
check_output_includes '6'
|
31
37
|
end
|
32
38
|
end
|
33
39
|
|
34
|
-
describe
|
40
|
+
describe 'stack trace on error' do
|
35
41
|
temporary_change_hash_value(Byebug::Command.settings, :stack_trace_on_error, false)
|
36
42
|
|
37
|
-
it
|
43
|
+
it 'must show a stack trace if showing trace on error is enabled' do
|
38
44
|
enter 'set notrace', 'eval 2 / 0'
|
39
45
|
debug_file 'eval'
|
40
|
-
check_output_includes
|
46
|
+
check_output_includes 'ZeroDivisionError Exception: divided by 0'
|
41
47
|
check_output_doesnt_include /\S+:\d+:in `eval':divided by 0/
|
42
48
|
end
|
43
49
|
|
44
|
-
it
|
50
|
+
it 'must show a stack trace if showing trace on error is enabled' do
|
45
51
|
enter 'set trace', 'eval 2 / 0'
|
46
52
|
debug_file 'eval'
|
47
53
|
check_output_includes /\S+:\d+:in `eval':divided by 0/
|
48
|
-
check_output_doesnt_include
|
54
|
+
check_output_doesnt_include 'ZeroDivisionError Exception: divided by 0'
|
49
55
|
end
|
50
56
|
end
|
51
57
|
|
52
58
|
|
53
|
-
it
|
54
|
-
enter 'pp {a:
|
59
|
+
it 'must pretty print the expression result' do
|
60
|
+
enter 'pp {a: \'3\' * 40, b: \'4\' * 30}'
|
55
61
|
debug_file 'eval'
|
56
|
-
check_output_includes "{:a=>\"#{
|
62
|
+
check_output_includes "{:a=>\"#{'3' * 40}\",\n :b=>\"#{'4' * 30}\"}"
|
57
63
|
end
|
58
64
|
|
59
|
-
it
|
65
|
+
it 'must print expression and columnize the result' do
|
60
66
|
temporary_change_hash_value(Byebug::PutLCommand.settings, :width, 20) do
|
61
67
|
enter 'putl [1, 2, 3, 4, 5, 9, 8, 7, 6]'
|
62
68
|
debug_file 'eval'
|
@@ -64,7 +70,7 @@ describe "Eval Command" do
|
|
64
70
|
end
|
65
71
|
end
|
66
72
|
|
67
|
-
it
|
73
|
+
it 'must print expression and sort and columnize the result' do
|
68
74
|
temporary_change_hash_value(Byebug::PSCommand.settings, :width, 20) do
|
69
75
|
enter 'ps [1, 2, 3, 4, 5, 9, 8, 7, 6]'
|
70
76
|
debug_file 'eval'
|
@@ -72,7 +78,7 @@ describe "Eval Command" do
|
|
72
78
|
end
|
73
79
|
end
|
74
80
|
|
75
|
-
it
|
81
|
+
it 'must set width by the "set" command' do
|
76
82
|
temporary_change_hash_value(Byebug::PSCommand.settings, :width, 20) do
|
77
83
|
enter 'set width 10', 'ps [1, 2, 3, 4, 5, 9, 8, 7, 6]'
|
78
84
|
debug_file 'eval'
|
@@ -80,12 +86,12 @@ describe "Eval Command" do
|
|
80
86
|
end
|
81
87
|
end
|
82
88
|
|
83
|
-
describe
|
84
|
-
it
|
85
|
-
skip(
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
+
describe 'Post Mortem' do
|
90
|
+
it 'must work in post-mortem mode' do
|
91
|
+
skip('No post morten mode for now')
|
92
|
+
enter 'cont', 'eval 2 + 2'
|
93
|
+
debug_file 'post_mortem'
|
94
|
+
check_output_includes '4'
|
89
95
|
end
|
90
96
|
end
|
91
97
|
|
data/test/frame_test.rb
CHANGED
@@ -1,70 +1,71 @@
|
|
1
1
|
require_relative 'test_helper'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe 'Frame Command' do
|
4
4
|
include TestDsl
|
5
5
|
|
6
|
-
it
|
6
|
+
it 'must go up' do
|
7
7
|
enter 'break 16', 'cont', 'up'
|
8
8
|
debug_file('frame') { state.line.must_equal 12 }
|
9
9
|
end
|
10
10
|
|
11
|
-
it
|
11
|
+
it 'must go up by specific number of frames' do
|
12
12
|
enter 'break 16', 'cont', 'up 2'
|
13
13
|
debug_file('frame') { state.line.must_equal 8 }
|
14
14
|
end
|
15
15
|
|
16
|
-
it
|
16
|
+
it 'must go down' do
|
17
17
|
enter 'break 16', 'cont', 'up', 'down'
|
18
18
|
debug_file('frame') { state.line.must_equal 16 }
|
19
19
|
end
|
20
20
|
|
21
|
-
it
|
21
|
+
it 'must go down by specific number of frames' do
|
22
22
|
enter 'break 16', 'cont', 'up 3', 'down 2'
|
23
23
|
debug_file('frame') { state.line.must_equal 12 }
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
26
|
+
it 'must set frame' do
|
27
27
|
enter 'break 16', 'cont', 'frame 2'
|
28
28
|
debug_file('frame') { state.line.must_equal 8 }
|
29
29
|
end
|
30
30
|
|
31
|
-
it
|
31
|
+
it 'must set frame to the first one by default' do
|
32
32
|
enter 'break 16', 'cont', 'up', 'frame'
|
33
33
|
debug_file('frame') { state.line.must_equal 16 }
|
34
34
|
end
|
35
35
|
|
36
|
-
it
|
36
|
+
it 'must print current stack frame when without arguments' do
|
37
37
|
enter 'break A.d', 'cont', 'up', 'frame'
|
38
|
-
debug_file('frame') { check_output_includes
|
38
|
+
debug_file('frame') { check_output_includes '#0', 'A.d(e#String)' }
|
39
39
|
end
|
40
40
|
|
41
|
-
it
|
41
|
+
it 'must set frame to the first one' do
|
42
42
|
enter 'break 16', 'cont', 'up', 'frame 0'
|
43
43
|
debug_file('frame') { state.line.must_equal 16 }
|
44
44
|
end
|
45
45
|
|
46
|
-
it
|
46
|
+
it 'must set frame to the last one' do
|
47
47
|
enter 'break 16', 'cont', 'frame -1'
|
48
|
-
debug_file('frame') { state.
|
48
|
+
debug_file('frame') { state.file.must_match /test_dsl.rb/ }
|
49
|
+
check_output_doesnt_include "at #{fullpath('frame')}:"
|
49
50
|
end
|
50
51
|
|
51
|
-
it
|
52
|
+
it 'must not set frame if the frame number is too low' do
|
52
53
|
enter 'break 16', 'cont', 'down'
|
53
54
|
debug_file('frame') { state.line.must_equal 16 }
|
54
55
|
check_output_includes \
|
55
|
-
|
56
|
+
'Adjusting would put us beyond the newest (innermost) frame.',
|
56
57
|
interface.error_queue
|
57
58
|
end
|
58
59
|
|
59
|
-
it
|
60
|
+
it 'must not set frame if the frame number is too high' do
|
60
61
|
enter 'break 16', 'cont', 'up 100'
|
61
62
|
debug_file('frame') { state.line.must_equal 16 }
|
62
63
|
check_output_includes \
|
63
|
-
|
64
|
+
'Adjusting would put us beyond the oldest (initial) frame.',
|
64
65
|
interface.error_queue
|
65
66
|
end
|
66
67
|
|
67
|
-
describe
|
68
|
+
describe 'full path settings' do
|
68
69
|
def short_path(fullpath)
|
69
70
|
separator = File::ALT_SEPARATOR || File::SEPARATOR
|
70
71
|
"...#{separator}" + fullpath.split(separator)[-3..-1].join(separator)
|
@@ -74,70 +75,70 @@ describe "Frame Command" do
|
|
74
75
|
Byebug::Command.settings[:callstyle] = :last
|
75
76
|
end
|
76
77
|
|
77
|
-
it
|
78
|
+
it 'must display current backtrace with full path = true' do
|
78
79
|
enter 'set fullpath', 'break 16', 'cont', 'where'
|
79
80
|
debug_file 'frame'
|
80
81
|
check_output_includes \
|
81
|
-
|
82
|
-
|
82
|
+
'-->', '#0', 'A.d(e#String)', "at #{fullpath('frame')}:16",
|
83
|
+
'#1', 'A.c' , "at #{fullpath('frame')}:12"
|
83
84
|
end
|
84
85
|
|
85
|
-
it
|
86
|
+
it 'must display current backtrace with full path = false' do
|
86
87
|
enter 'set nofullpath', 'break 16', 'cont', 'where'
|
87
88
|
debug_file 'frame'
|
88
89
|
check_output_includes \
|
89
|
-
|
90
|
-
|
90
|
+
'-->', '#0', 'A.d(e#String)', "at #{short_path(fullpath('frame'))}:16",
|
91
|
+
'#1', 'A.c' , "at #{short_path(fullpath('frame'))}:12"
|
91
92
|
end
|
92
93
|
end
|
93
94
|
|
94
|
-
describe
|
95
|
-
it
|
95
|
+
describe 'callstyles' do
|
96
|
+
it 'displays current backtrace with callstyle "last"' do
|
96
97
|
enter 'set callstyle last', 'break 16', 'cont', 'where'
|
97
98
|
debug_file 'frame'
|
98
99
|
check_output_includes \
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
100
|
+
'-->', '#0', 'A.d(e#String)', "at #{fullpath('frame')}:16",
|
101
|
+
'#1', 'A.c' , "at #{fullpath('frame')}:12",
|
102
|
+
'#2', 'A.b' , "at #{fullpath('frame')}:8" ,
|
103
|
+
'#3', 'A.a' , "at #{fullpath('frame')}:5"
|
103
104
|
end
|
104
105
|
|
105
|
-
it
|
106
|
+
it 'displays current backtrace with callstyle "short"' do
|
106
107
|
enter 'set callstyle short', 'break 16', 'cont', 'where'
|
107
108
|
debug_file 'frame'
|
108
109
|
check_output_includes \
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
110
|
+
'-->', '#0', 'd(e)', "at #{fullpath('frame')}:16",
|
111
|
+
'#1', 'c' , "at #{fullpath('frame')}:12",
|
112
|
+
'#2', 'b' , "at #{fullpath('frame')}:8" ,
|
113
|
+
'#3', 'a' , "at #{fullpath('frame')}:5"
|
113
114
|
end
|
114
115
|
|
115
|
-
it
|
116
|
-
skip(
|
116
|
+
it 'displays current backtrace with callstyle "tracked"' do
|
117
|
+
skip('XXX: Style supported but not working....')
|
117
118
|
enter 'set callstyle tracked'
|
118
119
|
debug_file 'frame'
|
119
120
|
check_output_includes \
|
120
|
-
|
121
|
+
'Invalid call style tracked. Should be one of: "last".'
|
121
122
|
Byebug::Command.settings[:callstyle].must_equal :last
|
122
123
|
end
|
123
124
|
end
|
124
125
|
|
125
|
-
it
|
126
|
-
skip(
|
126
|
+
it 'must change to frame in another thread' do
|
127
|
+
skip('No threads supported')
|
127
128
|
end
|
128
129
|
|
129
|
-
it
|
130
|
-
skip(
|
130
|
+
it 'must not change to frame in another thread if thread doesn\'t exist' do
|
131
|
+
skip('No threads supported')
|
131
132
|
end
|
132
133
|
|
133
|
-
describe
|
134
|
-
# TODO: This test fails with
|
134
|
+
describe 'Post Mortem' do
|
135
|
+
# TODO: This test fails with 'Segmentation fault'. Probably need to fix it
|
135
136
|
# somehow, or forbid this command in the post mortem mode. Seems like
|
136
137
|
# state.context.frame_file and state.context.frame_line cause that.
|
137
|
-
it
|
138
|
-
skip(
|
139
|
-
enter 'cont',
|
140
|
-
debug_file
|
138
|
+
it 'must work in post-mortem mode' do
|
139
|
+
skip('No post morten mode for now')
|
140
|
+
enter 'cont', 'frame'
|
141
|
+
debug_file 'post_mortem'
|
141
142
|
end
|
142
143
|
end
|
143
144
|
|
data/test/info_test.rb
CHANGED
@@ -235,9 +235,9 @@ describe "Info Command" do
|
|
235
235
|
enter 'break 20', 'cont', 'info stack'
|
236
236
|
debug_file 'info'
|
237
237
|
check_output_includes \
|
238
|
-
"-->", "#0", "A.a", "at
|
239
|
-
"#1", "A.b", "at
|
240
|
-
"#2", "at
|
238
|
+
"-->", "#0", "A.a", "at #{fullpath('info')}:20",
|
239
|
+
"#1", "A.b", "at #{fullpath('info')}:30",
|
240
|
+
"#2", "at #{fullpath('info')}:36"
|
241
241
|
end
|
242
242
|
end
|
243
243
|
|
@@ -262,7 +262,7 @@ describe "Info Command" do
|
|
262
262
|
enter 'break 20', 'cont', ->{"info thread #{context.thnum} verbose"}
|
263
263
|
debug_file 'info'
|
264
264
|
check_output_includes /#<Thread:\S+ run>/, "#0", "A.a",
|
265
|
-
"at
|
265
|
+
"at #{fullpath('info')}:20"
|
266
266
|
end
|
267
267
|
|
268
268
|
it "must show error when unknown parameter is used" do
|
data/test/list_test.rb
CHANGED
@@ -72,10 +72,7 @@ describe "List Command" do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
describe "autolist" do
|
75
|
-
before
|
76
|
-
Byebug::Command.settings[:listsize] = 3
|
77
|
-
Byebug::Command.settings[:autolist] = 0
|
78
|
-
end
|
75
|
+
before { Byebug::Command.settings[:listsize] = 3 }
|
79
76
|
|
80
77
|
it "must show the surronding lines even without 'list' command if autolist is enabled" do
|
81
78
|
enter 'set autolist', 'break 5', 'cont'
|
data/test/reload_test.rb
CHANGED
@@ -2,43 +2,48 @@ require_relative 'test_helper'
|
|
2
2
|
|
3
3
|
describe "Reload Command" do
|
4
4
|
include TestDsl
|
5
|
-
temporary_change_hash_value(Byebug::Command.settings, :reload_source_on_change, false)
|
6
5
|
|
7
|
-
|
8
|
-
enter 'reload'
|
9
|
-
debug_file 'reload'
|
10
|
-
check_output_includes "Source code is reloaded. Automatic reloading is off."
|
11
|
-
end
|
6
|
+
describe "Reload Command (Setup)" do
|
12
7
|
|
13
|
-
|
14
|
-
enter 'set autoreload', 'reload'
|
15
|
-
debug_file 'reload'
|
16
|
-
check_output_includes "Source code is reloaded. Automatic reloading is on."
|
17
|
-
end
|
8
|
+
before { Byebug::Command.settings[:reload_source_on_change] = false }
|
18
9
|
|
19
|
-
|
20
|
-
|
21
|
-
it "must reload the code" do
|
22
|
-
enter 'break 3', 'cont', 'l 4-4', -> do
|
23
|
-
change_line_in_file(fullpath('reload'), 4, '100')
|
24
|
-
'reload'
|
25
|
-
end, 'l 4-4'
|
10
|
+
it "must notify that automatic reloading is off" do
|
11
|
+
enter 'reload'
|
26
12
|
debug_file 'reload'
|
27
|
-
check_output_includes "
|
13
|
+
check_output_includes "Source code is reloaded. Automatic reloading is off."
|
28
14
|
end
|
29
|
-
end
|
30
15
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
#enter 'cont', -> do
|
36
|
-
# change_line_in_file(fullpath('post_mortem'), 7, 'z = 100')
|
37
|
-
# 'reload'
|
38
|
-
#end, 'l 7-7'
|
39
|
-
#debug_file 'post_mortem'
|
40
|
-
#check_output_includes "7 z = 100"
|
16
|
+
it "must notify that automatic reloading is on" do
|
17
|
+
enter 'set autoreload', 'reload'
|
18
|
+
debug_file 'reload'
|
19
|
+
check_output_includes "Source code is reloaded. Automatic reloading is on."
|
41
20
|
end
|
21
|
+
|
22
|
+
describe "reloading" do
|
23
|
+
after { change_line_in_file(fullpath('reload'), 4, '4') }
|
24
|
+
it "must reload the code" do
|
25
|
+
enter 'break 3', 'cont', 'l 4-4', -> do
|
26
|
+
change_line_in_file(fullpath('reload'), 4, '100')
|
27
|
+
'reload'
|
28
|
+
end, 'l 4-4'
|
29
|
+
debug_file 'reload'
|
30
|
+
check_output_includes "4 100"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "Post Mortem" do
|
35
|
+
after { change_line_in_file(fullpath('post_mortem'), 7, ' z = 4') }
|
36
|
+
it "must work in post-mortem mode" do
|
37
|
+
skip("No post morten mode for now")
|
38
|
+
enter 'cont', -> do
|
39
|
+
change_line_in_file(fullpath('post_mortem'), 7, 'z = 100')
|
40
|
+
'reload'
|
41
|
+
end, 'l 7-7'
|
42
|
+
debug_file 'post_mortem'
|
43
|
+
check_output_includes "7 z = 100"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
42
47
|
end
|
43
48
|
|
44
49
|
end
|
data/test/show_test.rb
CHANGED
@@ -19,7 +19,6 @@ describe "Show Command" do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
22
|
describe "args" do
|
24
23
|
temporary_change_hash_value(Byebug::Command.settings, :argv, %w{foo bar})
|
25
24
|
|
@@ -106,12 +105,11 @@ describe "Show Command" do
|
|
106
105
|
end
|
107
106
|
|
108
107
|
it "must show linetrace" do
|
109
|
-
enter 'trace on', 'show linetrace'
|
108
|
+
enter 'trace on', 'show linetrace', 'trace off'
|
110
109
|
debug_file 'show'
|
111
110
|
check_output_includes "line tracing is on."
|
112
111
|
end
|
113
112
|
|
114
|
-
|
115
113
|
describe "linetrace+" do
|
116
114
|
it "must show a message when linetrace+ is on" do
|
117
115
|
temporary_change_hash_value(Byebug::Command.settings, :tracing_plus, true) do
|
@@ -282,9 +280,9 @@ describe "Show Command" do
|
|
282
280
|
|
283
281
|
it "must work in post-mortem mode" do
|
284
282
|
skip("No post morten mode for now")
|
285
|
-
|
286
|
-
|
287
|
-
|
283
|
+
enter 'cont', "show autolist"
|
284
|
+
debug_file 'post_mortem'
|
285
|
+
check_output_includes "autolist is off."
|
288
286
|
end
|
289
287
|
end
|
290
288
|
|