byebug 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/.gitignore +4 -0
  2. data/.travis.yml +0 -5
  3. data/CHANGELOG.md +6 -0
  4. data/Gemfile +1 -1
  5. data/LICENSE +23 -20
  6. data/byebug.gemspec +5 -5
  7. data/ext/byebug/breakpoint.c +102 -134
  8. data/ext/byebug/byebug.c +110 -64
  9. data/ext/byebug/byebug.h +2 -3
  10. data/ext/byebug/context.c +72 -39
  11. data/lib/byebug.rb +34 -38
  12. data/lib/byebug/command.rb +19 -24
  13. data/lib/byebug/commands/breakpoints.rb +11 -12
  14. data/lib/byebug/commands/catchpoint.rb +1 -1
  15. data/lib/byebug/commands/control.rb +2 -4
  16. data/lib/byebug/commands/finish.rb +1 -1
  17. data/lib/byebug/commands/frame.rb +15 -17
  18. data/lib/byebug/commands/info.rb +29 -28
  19. data/lib/byebug/commands/irb.rb +23 -21
  20. data/lib/byebug/commands/method.rb +4 -4
  21. data/lib/byebug/commands/reload.rb +8 -6
  22. data/lib/byebug/commands/set.rb +27 -23
  23. data/lib/byebug/commands/show.rb +6 -4
  24. data/lib/byebug/commands/stepping.rb +2 -2
  25. data/lib/byebug/commands/threads.rb +10 -10
  26. data/lib/byebug/commands/trace.rb +13 -14
  27. data/lib/byebug/commands/variables.rb +14 -12
  28. data/lib/byebug/context.rb +2 -15
  29. data/lib/byebug/interface.rb +5 -0
  30. data/lib/byebug/processor.rb +59 -64
  31. data/lib/byebug/version.rb +2 -1
  32. data/old_doc/Makefile +20 -0
  33. data/{man/rdebug.1 → old_doc/byebug.1} +5 -5
  34. data/old_doc/byebug.html +6178 -0
  35. data/old_doc/byebug.texi +3775 -0
  36. data/{doc → old_doc}/hanoi.rb +0 -0
  37. data/{doc → old_doc}/primes.rb +0 -0
  38. data/{doc → old_doc}/test-tri2.rb +0 -0
  39. data/{doc → old_doc}/tri3.rb +0 -0
  40. data/{doc → old_doc}/triangle.rb +0 -0
  41. data/test/breakpoints_test.rb +96 -60
  42. data/test/conditions_test.rb +15 -12
  43. data/test/examples/info.rb +5 -5
  44. data/test/examples/stepping.rb +1 -1
  45. data/test/frame_test.rb +40 -39
  46. data/test/info_test.rb +105 -96
  47. data/test/irb_test.rb +66 -61
  48. data/test/jump_test.rb +18 -9
  49. data/test/list_test.rb +114 -107
  50. data/test/restart_test.rb +51 -58
  51. data/test/save_test.rb +8 -7
  52. data/test/set_test.rb +8 -11
  53. data/test/show_test.rb +3 -5
  54. data/test/stepping_test.rb +43 -53
  55. data/test/support/context.rb +1 -0
  56. data/test/support/processor.rb +10 -4
  57. data/test/support/test_dsl.rb +46 -18
  58. data/test/support/test_interface.rb +8 -5
  59. data/test/test_helper.rb +2 -2
  60. data/test/trace_test.rb +123 -124
  61. metadata +39 -17
  62. data/AUTHORS +0 -10
  63. data/doc/rdebug-emacs.texi +0 -1030
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -5,14 +5,15 @@ describe "Breakpoints" do
5
5
 
6
6
  describe "setting breakpoint in the current file" do
7
7
  before { enter 'break 10' }
8
- subject { breakpoint }
8
+ subject { Byebug.breakpoints.first }
9
9
 
10
10
  def check_subject(field, value)
11
11
  debug_file("breakpoint1") { subject.send(field).must_equal value }
12
12
  end
13
13
 
14
14
  it("must have correct pos") { check_subject(:pos, 10) }
15
- it("must have correct source") { check_subject(:source, fullpath("breakpoint1")) }
15
+ it("must have correct source") {
16
+ check_subject(:source, fullpath("breakpoint1")) }
16
17
  it("must have correct expression") { check_subject(:expr, nil) }
17
18
  it("must have correct hit count") { check_subject(:hit_count, 0) }
18
19
  it("must have correct hit value") { check_subject(:hit_value, 0) }
@@ -20,7 +21,8 @@ describe "Breakpoints" do
20
21
  it("must return right response") do
21
22
  id = nil
22
23
  debug_file('breakpoint1') { id = subject.id }
23
- check_output_includes "Breakpoint #{id} file #{fullpath('breakpoint1')}, line 10"
24
+ check_output_includes \
25
+ "Created breakpoint #{id} at #{fullpath('breakpoint1')}:10"
24
26
  end
25
27
  end
26
28
 
@@ -40,7 +42,9 @@ describe "Breakpoints" do
40
42
 
41
43
  it "must show an error" do
42
44
  debug_file("breakpoint1")
43
- check_output_includes "There are only #{LineCache.size(fullpath('breakpoint1'))} lines in file \"breakpoint1.rb\".", interface.error_queue
45
+ check_output_includes \
46
+ "There are only #{LineCache.size(fullpath('breakpoint1'))} lines in" \
47
+ " file #{fullpath('breakpoint1')}", interface.error_queue
44
48
  end
45
49
  end
46
50
 
@@ -54,7 +58,9 @@ describe "Breakpoints" do
54
58
 
55
59
  it "must show an error" do
56
60
  debug_file("breakpoint1")
57
- check_output_includes 'Line 11 is not a stopping point in file "breakpoint1.rb".', interface.error_queue
61
+ check_output_includes \
62
+ "Line 11 is not a stopping point in file #{fullpath('breakpoint1')}",
63
+ interface.error_queue
58
64
  end
59
65
  end
60
66
 
@@ -66,49 +72,63 @@ describe "Breakpoints" do
66
72
 
67
73
  it "must stop at the correct file" do
68
74
  enter 'break 14', 'cont'
69
- debug_file("breakpoint1") { state.file.must_equal fullpath("breakpoint1") }
75
+ debug_file("breakpoint1") {
76
+ state.file.must_equal fullpath("breakpoint1") }
70
77
  end
71
78
 
72
79
  describe "show a message" do
73
- temporary_change_hash_value(Byebug::Command.settings, :basename, false)
80
+ before do
81
+ @old_hashes = {}
82
+ set_tmp_hash(Byebug::Command.settings, :basename, false)
83
+ @id = nil
84
+ end
85
+
86
+ after do
87
+ restore_tmp_hash(Byebug::Command.settings, :basename)
88
+ end
74
89
 
75
90
  it "must show a message with full filename" do
76
91
  enter 'break 14', 'cont'
77
- debug_file("breakpoint1")
78
- check_output_includes "Breakpoint 1 at #{fullpath('breakpoint1')}:14"
92
+ debug_file("breakpoint1") { @id = Byebug.breakpoints.first.id }
93
+ check_output_includes \
94
+ "Created breakpoint #{@id} at #{fullpath('breakpoint1')}:14"
79
95
  end
80
96
 
81
97
  it "must show a message with basename" do
82
98
  enter 'set basename', 'break 14', 'cont'
83
- debug_file("breakpoint1")
84
- check_output_includes "Breakpoint 1 at breakpoint1.rb:14"
99
+ debug_file("breakpoint1") { @id = Byebug.breakpoints.first.id }
100
+ check_output_includes "Created breakpoint #{@id} at breakpoint1.rb:14"
85
101
  end
86
102
  end
87
103
  end
88
104
 
89
-
90
105
  describe "reloading source on change" do
91
- temporary_change_hash_value(Byebug::Command.settings, :reload_source_on_change, false)
92
-
93
106
  it "must not reload source if autoreload is not set" do
94
- enter(
107
+ id = nil
108
+ enter \
95
109
  'set noautoreload',
96
110
  ->{change_line_in_file(fullpath('breakpoint1'), 14, ''); 'break 14'},
97
- ->{change_line_in_file(fullpath('breakpoint1'), 14, 'c = a + b'); 'cont'}
98
- )
99
- debug_file "breakpoint1"
100
- check_output_includes "Breakpoint 1 at #{fullpath('breakpoint1')}:14"
111
+ ->{change_line_in_file(fullpath('breakpoint1'), 14, 'c = a + b');
112
+ 'cont'}
113
+ debug_file("breakpoint1") { id = Byebug.breakpoints.first.id }
114
+ check_output_includes \
115
+ "Created breakpoint #{id} at #{fullpath('breakpoint1')}:14"
101
116
  end
102
117
 
103
118
  it "must reload source if autoreload is set" do
104
119
  enter(
105
120
  'set autoreload',
106
121
  ->{change_line_in_file(fullpath('breakpoint1'), 14, ''); 'break 14'},
107
- # Setting second breakpoint just to reload the source code after rolling the file changes back
108
- ->{change_line_in_file(fullpath('breakpoint1'), 14, 'c = a + b'); 'break 15'}, 'cont'
122
+ # Setting second breakpoint just to reload the source code after rolling
123
+ # the file changes back
124
+ ->{change_line_in_file(fullpath('breakpoint1'), 14, 'c = a + b');
125
+ 'break 15'},
126
+ 'cont'
109
127
  )
110
128
  debug_file "breakpoint1"
111
- check_output_includes "Line 14 is not a stopping point in file \"breakpoint1.rb\".", interface.error_queue
129
+ check_output_includes \
130
+ "Line 14 is not a stopping point in file #{fullpath('breakpoint1')}",
131
+ interface.error_queue
112
132
  end
113
133
  end
114
134
 
@@ -123,7 +143,8 @@ describe "Breakpoints" do
123
143
  end
124
144
 
125
145
  it "must stop at the correct file" do
126
- debug_file("breakpoint1") { state.file.must_equal fullpath("breakpoint2") }
146
+ debug_file("breakpoint1") {
147
+ state.file.must_equal fullpath("breakpoint2") }
127
148
  end
128
149
  end
129
150
 
@@ -137,7 +158,8 @@ describe "Breakpoints" do
137
158
  end
138
159
 
139
160
  it "must ask about setting breakpoint anyway" do
140
- check_output_includes "Set breakpoint anyway? (y/n)", interface.confirm_queue
161
+ check_output_includes \
162
+ "Set breakpoint anyway? (y/n)", interface.confirm_queue
141
163
  end
142
164
  end
143
165
  end
@@ -153,7 +175,8 @@ describe "Breakpoints" do
153
175
  end
154
176
 
155
177
  it "must stop at the correct file" do
156
- debug_file("breakpoint1") { state.file.must_equal fullpath("breakpoint1") }
178
+ debug_file("breakpoint1") {
179
+ state.file.must_equal fullpath("breakpoint1") }
157
180
  end
158
181
  end
159
182
 
@@ -167,7 +190,8 @@ describe "Breakpoints" do
167
190
  end
168
191
 
169
192
  it "must stop at the correct file" do
170
- debug_file("breakpoint1") { state.file.must_equal fullpath("breakpoint1") }
193
+ debug_file("breakpoint1") {
194
+ state.file.must_equal fullpath("breakpoint1") }
171
195
  end
172
196
  end
173
197
 
@@ -180,7 +204,6 @@ describe "Breakpoints" do
180
204
  end
181
205
  end
182
206
 
183
-
184
207
  describe "set breakpoint to an invalid location" do
185
208
  before { enter "break foo" }
186
209
 
@@ -190,19 +213,20 @@ describe "Breakpoints" do
190
213
 
191
214
  it "must show an error" do
192
215
  debug_file("breakpoint1")
193
- check_output_includes 'Invalid breakpoint location: foo.', interface.error_queue
216
+ check_output_includes \
217
+ 'Invalid breakpoint location: foo.', interface.error_queue
194
218
  end
195
219
  end
196
220
 
197
-
198
221
  describe "disabling a breakpoint" do
199
222
  describe "successfully" do
200
223
  before { enter "break 14" }
201
224
 
202
225
  describe "short syntax" do
203
- before { enter ->{"disable #{breakpoint.id}"}, "break 15" }
226
+ before { enter ->{"disable #{Byebug.breakpoints.first.id}"}, "break 15" }
204
227
  it "must have a breakpoint with #enabled? returning false" do
205
- debug_file("breakpoint1") { breakpoint.enabled?.must_equal false }
228
+ debug_file("breakpoint1") {
229
+ Byebug.breakpoints.first.enabled?.must_equal false }
206
230
  end
207
231
 
208
232
  it "must not stop on the disabled breakpoint" do
@@ -212,9 +236,11 @@ describe "Breakpoints" do
212
236
  end
213
237
 
214
238
  describe "full syntax" do
215
- before { enter ->{"disable breakpoints #{breakpoint.id}"}, "break 15" }
239
+ before { enter ->{"disable breakpoints #{Byebug.breakpoints.first.id}"},
240
+ "break 15" }
216
241
  it "must have a breakpoint with #enabled? returning false" do
217
- debug_file("breakpoint1") { breakpoint.enabled?.must_equal false }
242
+ debug_file("breakpoint1") {
243
+ Byebug.breakpoints.first.enabled?.must_equal false }
218
244
  end
219
245
  end
220
246
  end
@@ -223,34 +249,40 @@ describe "Breakpoints" do
223
249
  it "must show an error if syntax is incorrect" do
224
250
  enter "disable"
225
251
  debug_file("breakpoint1")
226
- check_output_includes(
227
- '"disable" must be followed "display", "breakpoints" or breakpoint numbers.',
228
- interface.error_queue
229
- )
252
+ check_output_includes \
253
+ '"disable" must be followed "display", "breakpoints" or breakpoint ' \
254
+ 'numbers.', interface.error_queue
255
+
230
256
  end
231
257
 
232
258
  it "must show an error if no breakpoints is set" do
233
259
  enter "disable 1"
234
260
  debug_file("breakpoint1")
235
- check_output_includes 'No breakpoints have been set.', interface.error_queue
261
+ check_output_includes \
262
+ 'No breakpoints have been set.', interface.error_queue
236
263
  end
237
264
 
238
- it "must show an error if not a number is provided as an argument to 'disable' command" do
265
+ it "must show an error if not a number is provided as an argument to " \
266
+ " 'disable' command" do
239
267
  enter "break 14", "disable foo"
240
268
  debug_file("breakpoint1")
241
- check_output_includes "Disable breakpoints argument 'foo' needs to be a number."
269
+ check_output_includes \
270
+ "Disable breakpoints argument 'foo' needs to be a number."
242
271
  end
243
272
  end
244
273
  end
245
274
 
246
275
  describe "enabling a breakpoint" do
276
+
247
277
  describe "successfully" do
248
278
  before { enter "break 14" }
279
+
249
280
  describe "short syntax" do
250
- before { enter ->{"enable #{breakpoint.id}"}, "break 15" }
281
+ before { enter ->{"enable #{Byebug.breakpoints.first.id}"}, "break 15" }
251
282
 
252
283
  it "must have a breakpoint with #enabled? returning true" do
253
- debug_file("breakpoint1") { breakpoint.enabled?.must_equal true }
284
+ debug_file("breakpoint1") {
285
+ Byebug.breakpoints.first.enabled?.must_equal true }
254
286
  end
255
287
 
256
288
  it "must stop on the enabled breakpoint" do
@@ -260,10 +292,12 @@ describe "Breakpoints" do
260
292
  end
261
293
 
262
294
  describe "full syntax" do
263
- before { enter ->{"enable breakpoints #{breakpoint.id}"}, "break 15" }
295
+ before { enter ->{"enable breakpoints #{Byebug.breakpoints.first.id}"},
296
+ "break 15" }
264
297
 
265
298
  it "must have a breakpoint with #enabled? returning true" do
266
- debug_file("breakpoint1") { breakpoint.enabled?.must_equal true }
299
+ debug_file("breakpoint1") {
300
+ Byebug.breakpoints.first.enabled?.must_equal true }
267
301
  end
268
302
  end
269
303
  end
@@ -272,16 +306,15 @@ describe "Breakpoints" do
272
306
  it "must show an error if syntax is incorrect" do
273
307
  enter "enable"
274
308
  debug_file("breakpoint1")
275
- check_output_includes(
276
- '"enable" must be followed "display", "breakpoints" or breakpoint numbers.',
277
- interface.error_queue
278
- )
309
+ check_output_includes '"enable" must be followed "display", ' \
310
+ '"breakpoints" or breakpoint numbers.', interface.error_queue
279
311
  end
280
312
  end
281
313
  end
282
314
 
283
315
  describe "deleting a breakpoint" do
284
- before { enter "break 14", ->{"delete #{breakpoint.id}"}, "break 15" }
316
+ before { enter "break 14", ->{"delete #{Byebug.breakpoints.first.id}"},
317
+ "break 15" }
285
318
 
286
319
  it "must have only one breakpoint" do
287
320
  debug_file("breakpoint1") { Byebug.breakpoints.size.must_equal 1 }
@@ -307,42 +340,45 @@ describe "Breakpoints" do
307
340
  it "must show an error when conditional syntax is wrong" do
308
341
  enter "break 14 ifa b == 3", "break 15", "cont"
309
342
  debug_file("breakpoint1") { state.line.must_equal 15 }
310
- check_output_includes "Expecting 'if' in breakpoint condition; got: ifa b == 3.", interface.error_queue
343
+ check_output_includes \
344
+ "Expecting 'if' in breakpoint condition; got: ifa b == 3.",
345
+ interface.error_queue
311
346
  end
312
347
 
313
348
  describe "enabling with wrong conditional syntax" do
314
349
  before do
315
350
  enter(
316
351
  "break 14",
317
- ->{"disable #{breakpoint.id}"},
318
- ->{"cond #{breakpoint.id} b -=( 3"},
319
- ->{"enable #{breakpoint.id}"}
352
+ ->{"disable #{Byebug.breakpoints.first.id}"},
353
+ ->{"cond #{Byebug.breakpoints.first.id} b -=( 3"},
354
+ ->{"enable #{Byebug.breakpoints.first.id}"}
320
355
  )
321
356
  end
322
357
 
323
358
  it "must not enable a breakpoint" do
324
- debug_file("breakpoint1") { breakpoint.enabled?.must_equal false }
359
+ debug_file("breakpoint1") {
360
+ Byebug.breakpoints.first.enabled?.must_equal false }
325
361
  end
326
362
 
327
363
  it "must show an error" do
328
364
  debug_file("breakpoint1")
329
- check_output_includes(
330
- 'Expression "b -=( 3" syntactically incorrect; breakpoint remains disabled.',
331
- interface.error_queue
332
- )
365
+ check_output_includes 'Expression "b -=( 3" syntactically incorrect; ' \
366
+ 'breakpoint remains disabled.', interface.error_queue
333
367
  end
334
368
  end
335
369
 
336
370
  it "must show an error if no file or line is specified" do
337
371
  enter "break ifa b == 3", "break 15", "cont"
338
372
  debug_file("breakpoint1") { state.line.must_equal 15 }
339
- check_output_includes "Invalid breakpoint location: ifa b == 3.", interface.error_queue
373
+ check_output_includes \
374
+ "Invalid breakpoint location: ifa b == 3.", interface.error_queue
340
375
  end
341
376
 
342
377
  it "must show an error if expression syntax is invalid" do
343
378
  enter "break if b -=) 3", "break 15", "cont"
344
379
  debug_file("breakpoint1") { state.line.must_equal 15 }
345
- check_output_includes 'Expression "b -=) 3" syntactically incorrect; breakpoint disabled.', interface.error_queue
380
+ check_output_includes 'Expression "b -=) 3" syntactically incorrect; ' \
381
+ 'breakpoint disabled.', interface.error_queue
346
382
  end
347
383
  end
348
384
 
@@ -8,17 +8,18 @@ describe "Conditions" do
8
8
 
9
9
  describe "successfully" do
10
10
  it "must assign the expression to breakpoint" do
11
- enter ->{"cond #{breakpoint.id} b == 5"}, "cont"
12
- debug_file('conditions') { breakpoint.expr.must_equal "b == 5" }
11
+ enter ->{"cond #{Byebug.breakpoints.first.id} b == 5"}, "cont"
12
+ debug_file('conditions') {
13
+ Byebug.breakpoints.first.expr.must_equal "b == 5" }
13
14
  end
14
15
 
15
16
  it "must stop at the breakpoint if condition is true" do
16
- enter ->{"cond #{breakpoint.id} b == 5"}, "cont"
17
+ enter ->{"cond #{Byebug.breakpoints.first.id} b == 5"}, "cont"
17
18
  debug_file('conditions') { state.line.must_equal 3 }
18
19
  end
19
20
 
20
21
  it "must work with full command name too" do
21
- enter ->{"condition #{breakpoint.id} b == 5"}, "cont"
22
+ enter ->{"condition #{Byebug.breakpoints.first.id} b == 5"}, "cont"
22
23
  debug_file('conditions') { state.line.must_equal 3 }
23
24
  end
24
25
  end
@@ -27,25 +28,27 @@ describe "Conditions" do
27
28
  before { enter "break 4" }
28
29
 
29
30
  it "must not stop at the breakpoint if condition is false" do
30
- enter ->{"cond #{breakpoint.id} b == 3"}, "cont"
31
+ enter ->{"cond #{Byebug.breakpoints.first.id} b == 3"}, "cont"
31
32
  debug_file('conditions') { state.line.must_equal 4 }
32
33
  end
33
34
  it "must assign the expression to breakpoint in spite of incorrect syntax" do
34
- enter ->{"cond #{breakpoint.id} b =="}, "cont"
35
- debug_file('conditions') { breakpoint.expr.must_equal "b ==" }
35
+ enter ->{"cond #{Byebug.breakpoints.first.id} b =="}, "cont"
36
+ debug_file('conditions') {
37
+ Byebug.breakpoints.first.expr.must_equal "b ==" }
36
38
  end
37
39
  it "must ignore the condition if when incorrect syntax" do
38
- enter ->{"cond #{breakpoint.id} b =="}, "cont"
40
+ enter ->{"cond #{Byebug.breakpoints.first.id} b =="}, "cont"
39
41
  debug_file('conditions') { state.line.must_equal 4 }
40
42
  end
41
43
  end
42
44
  end
43
45
 
44
46
  describe "removing conditions" do
45
- before { enter "break 3 if b == 3", "break 4", ->{"cond #{breakpoint.id}"}, "cont" }
47
+ before { enter "break 3 if b == 3", "break 4",
48
+ ->{"cond #{Byebug.breakpoints.first.id}"}, "cont" }
46
49
 
47
50
  it "must remove the condition from the breakpoint" do
48
- debug_file('conditions') { breakpoint.expr.must_be_nil }
51
+ debug_file('conditions') { Byebug.breakpoints.first.expr.must_be_nil }
49
52
  end
50
53
 
51
54
  it "must not stop on the breakpoint" do
@@ -69,8 +72,8 @@ describe "Conditions" do
69
72
  describe "Post Mortem" do
70
73
  it "must be able to set conditions in post-mortem mode" do
71
74
  skip("No post morten mode for now")
72
- #enter 'cont', 'break 12', ->{"cond #{breakpoint.id} true"}, 'cont'
73
- #debug_file("post_mortem") { state.line.must_equal 12 }
75
+ enter 'cont', 'break 12', ->{"cond #{breakpoint.id} true"}, 'cont'
76
+ debug_file("post_mortem") { state.line.must_equal 12 }
74
77
  end
75
78
  end
76
79
 
@@ -2,11 +2,11 @@ byebug
2
2
  def bla(a, b)
3
3
  a + b
4
4
  end
5
- 2
6
- 3
7
- 4
8
- 5
9
- 6
5
+ va = 2
6
+ vb = 3
7
+ vc = 4
8
+ vd = 5
9
+ ve = 6
10
10
  bla("a" * 30, "b")
11
11
 
12
12
  class A
@@ -7,7 +7,7 @@ class SteppingExample
7
7
  end
8
8
 
9
9
  def b
10
- [1,2,3].map { |a| a.to_f }
10
+ v2 = 5 if 1 == 2 ; [1,2,3].map { |a| a.to_f }
11
11
  c
12
12
  end
13
13