byebug 2.2.2 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3259 +0,0 @@
1
- \input texinfo
2
- @setfilename byebug.info
3
-
4
- @set BYEBUG_VERSION 1.8.2
5
- @set UPDATED Aug-2013
6
-
7
- @macro Example {}
8
- @iftex
9
- @cartouche
10
- @end iftex
11
- @smallexample
12
- @end macro
13
-
14
- @macro EndExample {}
15
- @iftex
16
- @end cartouche
17
- @end iftex
18
- @end smallexample
19
- @end macro
20
-
21
- @c How to show optional variables.
22
- @macro ovar{varname}
23
- @r{[}@var{\varname\}@r{]}
24
- @end macro
25
-
26
- @settitle Byebug
27
- @setchapternewpage odd
28
- @c %**end of header
29
-
30
- @finalout
31
-
32
- @c This is a dir.info fragment to support semi-automated addition of
33
- @c manuals to an info tree.
34
- @dircategory Programming & development tools.
35
- @direntry
36
- * byebug: (byebug). Ruby Byebug
37
- @end direntry
38
-
39
- @titlepage
40
- @title Debugging with @code{byebug}
41
- @sp 1
42
- @subtitle @value{BYEBUG_VERSION} Edition
43
- @subtitle @value{UPDATED-MONTH}
44
- @author David Rodríguez, Rocky Bernstein, Kent Sibilev, and Mark Moseley
45
- @page
46
- @end titlepage
47
- @page
48
-
49
- @ifnottex
50
- @node Top, Summary, (dir), (dir)
51
- @top Debugging with byebug
52
-
53
- This file describes Byebug, a Ruby 2.0 debugger, version @value{BYEBUG_VERSION}
54
-
55
- Last updated: @value{UPDATED}
56
- @c Copyleft (U+0254) 2013
57
-
58
- @menu
59
- * Summary:: Overview of Byebug with sample sessions
60
- * Invocation:: Getting in and out
61
- * Byebug Command Reference:: Byebug's commands
62
- * Post-Mortem Debugging:: Debugging on an uncaught exception
63
- * Byebug Module and Class:: Byebug's module and class
64
-
65
- Appendix
66
- * Contributing::
67
-
68
- Indexes
69
- * Class Module Method Index:: An item for each Class, Module and Method.
70
- * Command Index:: An item for each command name.
71
- * General Index:: An item for each concept.
72
- @end menu
73
-
74
- @end ifnottex
75
-
76
- @contents
77
-
78
- @node Summary
79
- @chapter Summary of @code{byebug}
80
-
81
- The purpose of a debugger such as @code{byebug} is to allow you to see what is
82
- going on ``inside'' a Ruby program while it executes. @code{byebug} can do four
83
- main kinds of things (plus other things in support of these) to help you catch
84
- bugs in the act:
85
-
86
- @itemize @bullet
87
- @item
88
- Start your script, specifying anything that might affect its behavior.
89
-
90
- @item
91
- Make your script stop on specified conditions.
92
-
93
- @item
94
- Examine what has happened, when your script has stopped.
95
-
96
- @item
97
- Change things in your script, so you can experiment with correcting the effects
98
- of one bug and go on to learn about another.
99
- @end itemize
100
-
101
- Although you can use @code{byebug} to invoke your Ruby programs via a debugger
102
- at the outset, there are other ways to use and enter the debugger.
103
-
104
- @menu
105
- * First Sample Session:: @code{display}, @code{print}, @code{quit}
106
- * Second Sample Session:: @code{where}, @code{frame}, @code{restart}, @code{autoeval}, @code{break}, @code{ps}
107
- * Unit Testing Session:: Using byebug in unit testing
108
- * Byebug.start with a block:: Using the Byebug.start with a block
109
- * Debugging Oddities:: How debugging Ruby may be different...
110
- @end menu
111
-
112
- @node First Sample Session
113
- @section First Sample Session
114
-
115
- You can use this manual at your leisure to read all about @code{byebug}.
116
- However, a handful of commands are enough to get started using byebug. The
117
- following sections illustrates these commands.
118
-
119
- @iftex
120
- In this sample session, we emphasize user input like this: @b{input}, to make it
121
- easier to pick out from the surrounding output.
122
- @end iftex
123
-
124
- Below is Ruby code to compute a triangle number of a given length.
125
- @footnote{There are of course shorter ways to define @code{triangle} such as:
126
- @smallexample
127
- def triangle(n) (n * (n+1)) / 2 end
128
- @end smallexample
129
- The code we use in this example and the next is more for pedagogical purposes
130
- than how to write short Ruby code.}
131
-
132
- @smallexample
133
- $ @b{byebug triangle.rb}
134
- [1, 10] in /home/davidr/Proyectos/byebug/old_doc/triangle.rb
135
- 1 #!/usr/bin/env ruby
136
- 2 # Compute the n'th triangle number - the hard way
137
- 3 # triangle(n) == (n * (n+1)) / 2
138
- => 4 def triangle(n)
139
- 5 tri = 0
140
- 6 0.upto(n) do |i|
141
- 7 tri += i
142
- 8 end
143
- 9 tri
144
- 10 end
145
- (byebug)
146
- @end smallexample
147
-
148
- @noindent
149
-
150
- There are lots of command options, but we don't need them for now. See
151
- @ref{byebug command-line options} for a full list of command options.
152
-
153
- We are currently stopped before the first executable line of the program; this
154
- is line 4 of @code{triangle.rb}. If you are used to less dynamic languages and
155
- have used debuggers for more statically compiled languages like C, C++, or Java,
156
- it may seem odd to be stopped before a function definition but in Ruby line 4 is
157
- executed, the name @code{triangle} (probably) does not exist so issuing a method
158
- call of @code{triangle} will raise a ``method not found'' error.
159
-
160
- @code{byebug}'s prompt is @code{(byebug)}. If the program has died and you are
161
- in post-mortem debugging @code{(byebug:post-mortem)} is used instead. If the
162
- program has terminated normally, the string this position will be
163
- @code{(byebug:ctrl)}. The commands which are available change depending on the
164
- program's state.
165
-
166
- Byebug automatically lists 10 lines of code centered around the current line
167
- everytime it is stopped. The current line here is line 4 and is marked with
168
- @code{=>}, so the range byebug would like to show is [-1..8]. However since
169
- there aren't 5 lines before the current line, the range is moved ``up'' so we
170
- can actually display 10 lines of code.
171
-
172
- Now let us step through the program.
173
-
174
- @smallexample
175
- (byebug) @b{step}
176
- [4, 13] in /home/davidr/Proyectos/byebug/old_doc/triangle.rb
177
- 4 def triangle(n)
178
- 5 tri = 0
179
- 6 0.upto(n) do |i|
180
- 7 tri += i
181
- 8 end
182
- 9 tri
183
- 10 end
184
- 11
185
- => 12 t = triangle(3)
186
- 13 puts t
187
- (byebug) @b{@key{<RET>}}
188
- [1, 10] in /home/davidr/Proyectos/byebug/old_doc/triangle.rb
189
- 1 #!/usr/bin/env ruby
190
- 2 # Compute the n'th triangle number - the hard way
191
- 3 # triangle(n) == (n * (n+1)) / 2
192
- 4 def triangle(n)
193
- => 5 tri = 0
194
- 6 0.upto(n) do |i|
195
- 7 tri += i
196
- 8 end
197
- 9 tri
198
- 10 end
199
- (byebug) @b{p tri}
200
- nil
201
- (byebug) @b{step}
202
- [1, 10] in /home/davidr/Proyectos/byebug/old_doc/triangle.rb
203
- 1 #!/usr/bin/env ruby
204
- 2 # Compute the n'th triangle number - the hard way
205
- 3 # triangle(n) == (n * (n+1)) / 2
206
- 4 def triangle(n)
207
- 5 tri = 0
208
- => 6 0.upto(n) do |i|
209
- 7 tri += i
210
- 8 end
211
- 9 tri
212
- 10 end
213
- (byebug) @b{p tri}
214
- 0
215
- @end smallexample
216
-
217
- The first @kbd{step} command (@pxref{Step}) runs the script one executable unit.
218
- The second command we entered was just hitting the return key; @code{byebug}
219
- remembers the last command you entered was @code{step}, so it runs that last
220
- command again.
221
-
222
- One way to print the values of variables uses @code{p} (of course, there are
223
- lots of other ways). When we look at the value of @code{tri} the first time, we
224
- see it is @code{nil}. Again we are stopped @emph{before} the assignment on line
225
- 5, and this variable hasn't been set previously. However after issuing another
226
- @code{step} command we see that the value is 0 as expected. If every time we
227
- stop we want to see the value of @code{tri} to see how things are going, there
228
- is a better way by setting a display expression (@pxref{DisplayCommands}).
229
-
230
- @smallexample
231
- (byebug:1) @b{display tri}
232
- 1: tri = 0
233
- @end smallexample
234
-
235
- Now let us run the program until we return from the function. We'll want to see
236
- which lines get run.
237
-
238
- @smallexample
239
- (byebug) @b{display i}
240
- 2: i =
241
- (byebug) @b{set linetrace on}
242
- line tracing is on.
243
- (byebug) @b{finish}
244
- Tracing: /home/davidr/Proyectos/byebug/old_doc/triangle.rb:7 tri += i
245
- 1: tri = 0
246
- 2: i = 0
247
- Tracing: /home/davidr/Proyectos/byebug/old_doc/triangle.rb:7 tri += i
248
- 1: tri = 0
249
- 2: i = 1
250
- Tracing: /home/davidr/Proyectos/byebug/old_doc/triangle.rb:7 tri += i
251
- 1: tri = 1
252
- 2: i = 2
253
- Tracing: /home/davidr/Proyectos/byebug/old_doc/triangle.rb:7 tri += i
254
- 1: tri = 3
255
- 2: i = 3
256
- Tracing: /home/davidr/Proyectos/byebug/old_doc/triangle.rb:9 tri
257
- 1: tri = 6
258
- 2: i =
259
- Tracing: /home/davidr/Proyectos/byebug/old_doc/triangle.rb:13 puts t
260
- 1: tri =
261
- 2: i =
262
- [4, 13] in /home/davidr/Proyectos/byebug/old_doc/triangle.rb
263
- 4 def triangle(n)
264
- 5 tri = 0
265
- 6 0.upto(n) do |i|
266
- 7 tri += i
267
- 8 end
268
- 9 tri
269
- 10 end
270
- 11
271
- 12 t = triangle(3)
272
- => 13 puts t
273
- 1: tri =
274
- 2: i =
275
- (byebug) @b{quit}
276
- Really quit? (y/n) @b{y}
277
- @end smallexample
278
-
279
- So far, so good. As you can see from the above to get out of @code{byebug}, one
280
- can issue a @code{quit} command (@code{q} and @code{exit} are just as good). If
281
- you want to quit without being prompted, suffix the command with an exclamation
282
- mark, e.g. @code{q!}.
283
-
284
- @node Second Sample Session
285
- @section Second Sample Session 2: Delving Deeper
286
-
287
- In this section we'll introduce breakpoints, the call stack and restarting. So
288
- far we've been doing pretty good in that we've not encountered a bug to fix.
289
- Let's try another simple example. Okay here's the program.
290
-
291
- Below we will debug a simple Ruby program to solve the classic Towers of Hanoi
292
- puzzle. It is augmented by the bane of programming: some command-parameter
293
- processing with error checking.
294
-
295
- @smallexample
296
- $ @b{byebug hanoi.rb}
297
- hanoi.rb:3 def hanoi(n,a,b,c)
298
- (byebug:1) @b{list 1,100}
299
- [1, 100] in ./hanoi.rb
300
- 1 #!/usr/bin/ruby
301
- 2
302
- => 3 def hanoi(n,a,b,c)
303
- 4 if n-1 > 0
304
- 5 hanoi(n-1, a, c, b)
305
- 6 end
306
- 7 puts "Move disk %s to %s" % [a, b]
307
- 8 if n-1 > 0
308
- 9 hanoi(n-1, c, b, a)
309
- 10 end
310
- 11 end
311
- 12
312
- 13 i_args=ARGV.length
313
- 14 if i_args > 1
314
- 15 puts "*** Need number of disks or no parameter"
315
- 16 exit 1
316
- 17 end
317
- 18
318
- 19 n=3
319
- 20
320
- 21 if i_args > 0
321
- 22 begin
322
- 23 n = ARGV[0].to_i
323
- 24 rescue ValueError, msg
324
- 25 print "** Expecting an integer, got: %s" % ARGV[0].to_s
325
- 26 exit 2
326
- 27 end
327
- 28 end
328
- 29
329
- 30 if n < 1 or n > 100
330
- 31 puts "*** number of disks should be between 1 and 100"
331
- 32 exit 2
332
- 33 end
333
- 34
334
- 35 hanoi(n, :a, :b, :c)
335
- (byebug:1)
336
- @end smallexample
337
-
338
- Recall in the first section I said that before the @code{def} is run
339
- the method it names is undefined. Let's check that out. First let's
340
- see what private methods we can call before running @code{def hanoi}
341
-
342
- @smallexample
343
- (byebug:1) @b{set autoeval on}
344
- autoeval is on.
345
- (byebug:1) @b{private_methods}
346
- [:require_relative, :Digest, :default_src_encoding, :debug_program, ...
347
- @end smallexample
348
-
349
- The @code{set autoeval} (@pxref{Autoeval}) command causes any commands
350
- that are not normally understood to be byebug commands to get
351
- evaluated as though they were Ruby commands. I use this a lot, so I
352
- set this by putting it the command file @code{.byebugrc},
353
- @pxref{Command Files}, that gets read when @code{byebug} starts.
354
-
355
- As showing the list output of @code{private_methods}, I find this kind
356
- of list unwieldy. What you are supposed to notice here is that
357
- method @code{hanoi} is not in this list. When you ask
358
- @code{byebug} for a list of method names via @code{method
359
- instance}, it doesn't show output in this way; @code{byebug} can
360
- sort and put into columns lists like this using the print command, @code{ps}.
361
-
362
-
363
- @smallexample
364
- (byebug:1) @b{ps private_methods}
365
- Array debug_program p spawn
366
- Complex default_src_encoding pp sprintf
367
- Digest eval print srand
368
- Float exec printf syscall
369
- Integer exit proc system
370
- Pathname exit! process_options test
371
- Rational fail putc throw
372
- String fork puts trace_var
373
- __callee__ format raise trap
374
- __method__ gem rand untrace_var
375
- ` gets readline warn
376
- abort global_variables readlines whence_file
377
- at_exit initialize remove_instance_variable y
378
- autoload initialize_copy require
379
- autoload? iterator? require_relative
380
- binding lambda select
381
- block_given? load set_trace_func
382
- caller local_variables singleton_method_added
383
- catch loop singleton_method_removed
384
- dbg_print method_missing singleton_method_undefined
385
- dbg_puts open sleep
386
- @end smallexample
387
-
388
- Now let's see what happens after stepping:
389
-
390
- @smallexample
391
- (byebug:1) @b{private_methods.member?(:hanoi)}
392
- false
393
- (byebug:1) @b{step}
394
- hanoi.rb:13
395
- i_args=ARGV.length
396
- (byebug:1) @b{private_methods.member?(:hanoi)}
397
- true
398
- (byebug:1)
399
- @end smallexample
400
-
401
- Okay, now where were we?
402
-
403
- @smallexample
404
- (byebug:1) @b{list}
405
- [8, 17] in ./hanoi.rb
406
- 8 if n-1 > 0
407
- 9 hanoi(n-1, c, b, a)
408
- 10 end
409
- 11 end
410
- 12
411
- => 13 i_args=ARGV.length
412
- 14 if i_args > 1
413
- 15 puts "*** Need number of disks or no parameter"
414
- 16 exit 1
415
- 17 end
416
- (byebug:1) @b{ARGV}
417
- []
418
- @end smallexample
419
-
420
- Ooops. We forgot to specify any parameters to this program. Let's try
421
- again. We can use the @code{restart} command here.
422
-
423
- @smallexample
424
- (byebug:1) @b{restart 3}
425
- Re exec'ing:
426
- /usr/bin/byebug hanoi.rb 3
427
- hanoi.rb:3
428
- def hanoi(n,a,b,c)
429
- (byebug:1) @b{break 4}
430
- Breakpoint 1 file hanoi.rb, line 4
431
- (byebug:1) @b{continue}
432
- Breakpoint 1 at hanoi.rb:4
433
- ./hanoi.rb:4 if n-1 > 0
434
- (byebug:1) @b{display n}
435
- 1: n = 3
436
- (byebug:1) @b{display a}
437
- 2: a = a
438
- (byebug:1) @b{undisplay 2}
439
- (byebug:1) @b{display a.inspect}
440
- 3: a.inspect = :a
441
- (byebug:1) @b{display b.inspect}
442
- 4: b.inspect = :b
443
- (byebug:1) @b{continue}
444
- Breakpoint 1 at hanoi.rb:4
445
- 1: n = 2
446
- 3: a.inspect = :a
447
- 4: b.inspect = :c
448
- ./hanoi.rb:4
449
- if n-1 > 0
450
- (byebug:1) @b{c}
451
- Breakpoint 1 at hanoi.rb:4
452
- 1: n = 1
453
- 3: a.inspect = :a
454
- 4: b.inspect = :b
455
- ./hanoi.rb:4
456
- if n-1 > 0
457
- (byebug:1) @b{where}
458
- --> #0 Object.hanoi(n#Fixnum, a#Symbol, b#Symbol, c#Symbol) at hanoi.rb:4
459
- #1 Object.hanoi(n#Fixnum, a#Symbol, b#Symbol, c#Symbol) at hanoi.rb:5
460
- #2 Object.hanoi(n#Fixnum, a#Symbol, b#Symbol, c#Symbol) at hanoi.rb:5
461
- #3 at hanoi.rb:35
462
- (byebug:1)
463
- @end smallexample
464
-
465
- In the above we added a new command, @code{break} (@pxref{Breakpoints}) which
466
- indicates to go into byebug just before that line of code is run. And
467
- @code{continue} resumes execution. Notice the difference between
468
- @code{display a} and @code{display a.inspect}. An implied string conversion is
469
- performed on the expression after it is evaluated. To remove a display
470
- expression @code{undisplay} is used. If we give a display number, just that
471
- display expression is removed.
472
-
473
- Above we also used a new command @code{where} (@pxref{Backtrace} to show the
474
- call stack. In the above situation, starting from the bottom line we see we
475
- called the hanoi from line 35 of the file @code{hanoi.rb} and the hanoi method
476
- called itself two more times at line 5.
477
-
478
- In the call stack we show the file line position in the same format we use when
479
- we stop at a line. Also we see the names of the parameters and the types that
480
- those parameters @emph{currently} have. It's possible that when the program was
481
- called the parameter had a different type, since the types of variables can
482
- change dynamically. You can alter the style of what to show in the trace
483
- (@pxref{Callstyle}).
484
-
485
- Let's explore a little more. Now where were we?
486
- @smallexample
487
- (byebug:1) @b{list}
488
- 1 #!/usr/bin/ruby
489
- 2
490
- 3 def hanoi(n,a,b,c)
491
- => 4 if n-1 > 0
492
- 5 hanoi(n-1, a, c, b)
493
- 6 end
494
- 7 puts "Move disk %s to %s" % [a, b]
495
- 8 if n-1 > 0
496
- (byebug:1) @b{undisplay}
497
- Clear all expressions? (y/n) @b{y}
498
- (byebug:1) @b{i_args}
499
- NameError Exception: undefined local variable or method `i_args' for main:Object
500
- (byebug:1) @b{frame -1}
501
- #3 at hanoi.rb:35
502
- (byebug:1) @b{i_args}
503
- 1
504
- (byebug:1) @b{p n}
505
- 3
506
- (byebug:1) @b{down 2}
507
- #2 Object.hanoi(n#Fixnum, a#Symbol, b#Symbol, c#Symbol) at hanoi.rb:5
508
- (byebug:1) @b{p n}
509
- 2
510
- @end smallexample
511
-
512
- Notice in the above to get the value of variable @code{n} I had to use a print
513
- command like @code{p n}; If I entered just @code{n}, that would be taken to mean
514
- byebug command ``next''. In the current scope, variable @code{i_args} is not
515
- defined. However I can change to the top-most frame by using the @code{frame}
516
- command. Just as with arrays, -1 means the last one. Alternatively using frame
517
- number 3 would have been the same thing; so would issuing @code{up 3}.
518
-
519
- Note that in the outside frame 3, the value of @code{i_args} can be shown. Also
520
- note that the value of variable @code{n} is different.
521
-
522
- @node Unit Testing Session
523
- @section Using byebug in unit testing (@code{byebug}, @code{Byebug.start})
524
-
525
- In the previous sessions we've been calling byebug right at the outset. I
526
- confess that this mode of operation is usually not how I use byebug.
527
-
528
- There are a number of situations where calling byebug at the outset is
529
- impractical for a couple of reasons.
530
-
531
- @enumerate
532
- @item
533
- byebug just doesn't work when run at the outset. By necessity any debugging
534
- changes the behavior or the program in slight and subtle ways, and sometimes
535
- this can hinder finding bugs.
536
- @item
537
- There's a lot of code that needs to be run before the part you want to inspect.
538
- Running this code takes time and you don't want the overhead of byebug.
539
- @end enumerate
540
-
541
- In this section we'll show how to enter the code in the middle of your program,
542
- while delving more into byebug's operation.
543
-
544
- In this section we will also use unit testing. Using unit tests will greatly
545
- reduce the amount of debugging needed, while at the same time, will increase the
546
- quality of your program.
547
-
548
- What we'll do is take the @code{triangle} code from the first session and write
549
- a unit test for that. In a sense we did write a minitest for the program which
550
- was basically the last line where we printed the value of triangle(3). This test
551
- however wasn't automated: the implication is that someone would look at the
552
- output and verify that what was printed is what was expected.
553
-
554
- Before we can turn that into something that can be @code{required}, we probably
555
- want to remove that output. However I like to keep in that line so that when I
556
- look at the file, I have an example of how to run it. Therefore we will
557
- conditionally run this line if that file is invoked directly, but skip it if it
558
- is not@footnote{@code{byebug} resets @code{$0} to try to make things like this
559
- work.}.
560
- @smallexample
561
- if __FILE__ == $0
562
- t = triangle(3)
563
- puts t
564
- end
565
- @end smallexample
566
-
567
- Let's call this file @code{tri2.rb}.
568
-
569
- Okay, we're now ready to write our unit test. We'll use @code{"test/unit"} which
570
- comes with the standard Ruby distribution. Here's the test code; it should be
571
- in the same directory as tri2.rb.
572
- @smallexample
573
- #!/usr/bin/env ruby
574
- require 'test/unit'
575
- require_relative './tri2.rb'
576
-
577
- class TestTri < Test::Unit::TestCase
578
- def test_basic
579
- solutions = []
580
- 0.upto(5) do |i|
581
- solutions << triangle(i)
582
- end
583
- assert_equal([0, 1, 3, 6, 10, 15], solutions,
584
- 'Testing the first 5 triangle numbers')
585
- end
586
- end
587
- @end smallexample
588
-
589
- If you run it, it will work. However if you run @code{byebug} initially, you
590
- will not get into the test, because @code{test/unit} wants to be the main
591
- program. So here is a situation where one may need to modify the program to add
592
- an explicit @emph{entry} into byebug. @footnote{For some versions of rake and
593
- @code{byebug} you can in fact set a breakpoint after running @code{byebug}
594
- initially. Personally though I find it much simpler and more reliable to modify
595
- the code as shown here.}
596
-
597
- One way to do this is to add the following before the place you want to stop:
598
- @smallexample
599
- require 'byebug'
600
- byebug
601
- @end smallexample
602
-
603
- Let's add this code just after entering @code{test_basic}:
604
- @smallexample
605
- ...
606
- def test_basic
607
- @b{require "byebug"}
608
- @b{byebug}
609
- solutions = []
610
- ...
611
- @end smallexample
612
-
613
- Now we run the program..
614
- @smallexample
615
- $ @b{ruby test-tri.rb}
616
- Loaded suite test-tri
617
- Started
618
- test-tri.rb:9
619
- solutions = []
620
- (byebug:1)
621
- @end smallexample
622
- and we see that we are stopped at line 9 just before the initialization of the
623
- list @code{solutions}.
624
-
625
- Now let's see where we are...
626
- @smallexample
627
- (byebug:1) @b{where}
628
- --> #0 TestTri.test_basic at /home/rocky/ruby/test-tri.rb:9
629
- (byebug:1)
630
- @end smallexample
631
-
632
- Something seems wrong here; @code{TestTri.test_basic} indicates that we are in
633
- class @code{TestTri} in method @code{test_basic}. However we don't see the call
634
- to this like we did in the last example when we used the @code{where} command.
635
- This is because byebug really didn't spring into existence until after we
636
- already had entered that method, and Ruby doesn't keep call stack information
637
- around in a way that would give the information we show when running
638
- @code{where}.
639
-
640
- If we want call stack information, we have to turn call-stack tracking on
641
- @emph{beforehand}. This is done by adding @code{Byebug.start}.
642
-
643
- Here's what our test program looks like so after we modify it to start tracking
644
- calls from the outset
645
- @smallexample
646
- #!/usr/bin/env ruby
647
- require 'test/unit'
648
- require 'tri2.rb'
649
- require 'byebug'
650
- @b{Byebug.start}
651
-
652
- class TestTri < Test::Unit::TestCase
653
- def test_basic
654
- @b{byebug}
655
- solutions = []
656
- 0.upto(5) do |i|
657
- solutions << triangle(i)
658
- end
659
- assert_equal([0, 1, 3, 6, 10, 15], solutions,
660
- "Testing the first 5 triangle numbers")
661
- end
662
- end
663
- @end smallexample
664
-
665
- Now when we run this:
666
- @smallexample
667
- $ @b{ruby test-tri2.rb}
668
- Loaded suite test-tri2
669
- Started
670
- test-tri2.rb:11
671
- solutions = []
672
- (byebug:1) @b{where}
673
- --> #0 TestTri.test_basic at test-tri2.rb:11
674
- #1 MiniTest::Unit::TestCase.run(runner#MiniTest::Unit)
675
- at /usr/local/lib/ruby/1.9.1/minitest/unit.rb:458
676
- #2 MiniTest::Unit.run_test_suites
677
- at /usr/local/lib/ruby/1.9.1/minitest/unit.rb:426
678
- #3 MiniTest::Unit.run
679
- at /usr/local/lib/ruby/1.9.1/minitest/unit.rb:393
680
- #4 at /usr/local/lib/ruby/1.9.1/minitest/unit.rb:334
681
- (byebug:1)
682
- @end smallexample
683
-
684
- Much better. But again let me emphasize that the parameter types are those of
685
- the corresponding variables that @emph{currently} exist, and this might have
686
- changed since the time when the call was made.
687
-
688
- @node Byebug.start with a block
689
- @section Using the @code{Byebug.start} with a block
690
-
691
- We saw that @code{Byebug.start()} and @code{Byebug.stop()} allow fine-grain
692
- control over where byebug tracking should occur.
693
-
694
- Rather than use an explicit @code{stop()}, you can also pass a block to the
695
- @code{start()} method. This causes @code{start()} to run and then @code{yield}
696
- to that block. When the block is finished, @code{stop()} is run. In other words,
697
- this wraps a @code{Byebug.start()} and @code{Byebug.stop()} around the block of
698
- code. But it also has a side benefit of ensuring that in the presence of an
699
- uncaught exception @code{stop} is run, without having to explicitly use
700
- @code{begin} ... @code{ensure Byebug.stop() end}.
701
-
702
- For example, in Ruby on Rails you might want to debug code in one of the
703
- controllers without causing any slowdown to any other code. And this can be done
704
- by wrapping the controller in a @code{start()} with a block; when the method
705
- wrapped this way finishes, byebug is turned off and the application proceeds at
706
- regular speed.
707
-
708
- Of course, inside the block you will probably want to enter the byebug using
709
- @code{Byebug.byebug()}, otherwise there would be little point in using the
710
- @code{start}. For example, you can do this in @code{irb}:
711
- @smallexample
712
- $ @b{irb}
713
- irb(main):001:0> @b{require 'byebug'}
714
- => true
715
- irb(main):002:0> @b{def foo}
716
- irb(main):003:1> @b{x=1}
717
- irb(main):004:1> @b{puts 'foo'}
718
- irb(main):005:1> @b{end}
719
- => nil
720
- irb(main):006:0> @b{Byebug.start@{byebug; foo@}}
721
- (irb):3
722
-
723
- (byebug:1) @b{s}
724
- (irb):4
725
-
726
- (byebug:1) @b{p x}
727
- 1
728
- (byebug:1) @b{s}
729
- foo
730
- => true
731
- irb(main):007:0>
732
- @end smallexample
733
-
734
- There is a counter inside of @code{Byebug.start} method to make sure that this
735
- works when another @code{Byebug.start} method is called inside of the outer one.
736
- However if you are stopped inside byebug, issuing another @code{byebug} call
737
- will not have any effect even if it is nested inside another
738
- @code{Byebug.start}.
739
-
740
- @node Debugging Oddities
741
- @section How debugging Ruby may be different from debugging other languages
742
-
743
- If you are used to debugging in other languages like C, C++, Perl, Java or even
744
- Bash@footnote{this is just an excuse to put in a shameless plug for this bash
745
- debugger @url{http://bashdb.sf.net}}, there may be a number of things that seem
746
- or feel a little bit different and may confuse you. A number of these things
747
- aren't oddities of the debugger per se, so much as a difference in how Ruby
748
- works compared to those other languages. Because Ruby works a little differently
749
- from those other languages, writing a debugger has to also be a little
750
- different as well if it is to be useful.
751
-
752
- In this respect, using byebug may help you understand Ruby better.
753
-
754
- We've already seen two examples of such differences. One difference is the fact
755
- that we stop on method definitions or @code{def}'s and that is because these are
756
- in fact executable statements. In other compiled languages this would not happen
757
- because that's already been done when you compile the program (or in Perl when
758
- it scans in the program). The other difference we saw was our inability to show
759
- call stack parameter types without having made arrangements for byebug to track
760
- this. In other languages call stack information is usually available without
761
- asking assistance of the debugger@footnote{However in C and C++ you generally
762
- have to ask the compiler to add such information.}.
763
-
764
- In this section we'll consider some other things that might throw off new users
765
- to Ruby who are familiar with other languages and debugging in them.
766
-
767
- @menu
768
- * Bouncing Around in Blocks (e.g. Iterators)::
769
- * No Parameter Values in a Call Stack::
770
- * Lines You Can Stop At::
771
- @end menu
772
-
773
- @node Bouncing Around in Blocks (e.g. Iterators)
774
- @subsection Bouncing Around in Blocks (e.g.@: Iterators)
775
- When debugging languages with coroutines like Python and Ruby, a method call may
776
- not necessarily go to the first statement after the method header. It's possible
777
- that the call will continue after a @code{yield} statement from a prior call.
778
-
779
- @smallexample
780
- 1 #!/usr/bin/env ruby
781
- 2 # Enumerator for primes
782
- 3 class SievePrime
783
- 4 @@@@odd_primes = []
784
- 5 def self.next_prime(&block)
785
- 6 candidate = 2
786
- 7 yield candidate
787
- 8 not_prime = false
788
- 9 candidate += 1
789
- 10 while true do
790
- 11 @@@@odd_primes.each do |p|
791
- 12 not_prime = (0 == (candidate % p))
792
- 13 break if not_prime
793
- 14 end
794
- 15 unless not_prime
795
- 16 @@@@odd_primes << candidate
796
- 17 yield candidate
797
- 18 end
798
- 19 candidate += 2
799
- 20 end
800
- 21 end
801
- 22 end
802
- 23 SievePrime.next_prime do |prime|
803
- 24 puts prime
804
- 25 break if prime > 10
805
- 26 end
806
- @end smallexample
807
-
808
- @smallexample
809
- $ @b{byebug primes.rb}
810
- primes.rb:3
811
- class SievePrime
812
- (byebug:1) @b{set linetrace on}
813
- line tracing is on.
814
- (byebug:1) @b{step 9}
815
- Tracing(1):primes.rb:4 @@odd_primes = []
816
- Tracing(1):primes.rb:5 def self.next_prime(&block)
817
- Tracing(1):primes.rb:23 SievePrime.next_prime do |prime|
818
- Tracing(1):primes.rb:6 candidate = 2
819
- Tracing(1):primes.rb:7 yield candidate
820
- Tracing(1):primes.rb:24 puts prime
821
- 2
822
- Tracing(1):primes.rb:25 break if prime > 10
823
- Tracing(1):primes.rb:8 not_prime = false
824
- Tracing(1):primes.rb:9 candidate += 1
825
- primes.rb:9
826
- candidate += 1
827
- (byebug:1)
828
- @end smallexample
829
-
830
- The loop between lines 23--26 gets interleaved between those of
831
- @code{Sieve::next_prime}, lines 6--19 above.
832
-
833
- @node No Parameter Values in a Call Stack
834
- @subsection No Parameter Values in a Call Stack
835
- In traditional debuggers, in a call stack you can generally see the names of the
836
- parameters and the values that were passed in.
837
-
838
- Ruby is a very dynamic language and it tries to be efficient within the confines
839
- of the language definition. Values generally aren't taken out of a variable or
840
- expression and pushed onto a stack. Instead a new scope created and the
841
- parameters are given initial values. Parameter passing is by @emph{reference},
842
- not by value as it is say Algol, C, or Perl. During the execution of a method,
843
- parameter values can change---and often do. In fact even the @emph{class} of the
844
- object can change.
845
-
846
- So at present, the name of the parameter shown. The call-style setting
847
- @pxref{Callstyle} can be used to set whether the name is shown or the name and
848
- the @emph{current} class of the object.
849
-
850
- It has been contemplated that a style might be added which saves on call shorter
851
- ``scalar'' types of values and the class name.
852
-
853
- @node Lines You Can Stop At
854
- @subsection Lines You Can Stop At
855
- As with the duplicate stops per control (e.g.@: @code{if} statement), until
856
- tools like byebugs get more traction among core ruby developers there are going
857
- to be weirdness. Here we describe the stopping locations which effects the
858
- breakpoint line numbers you can stop at.
859
-
860
- Consider the following little Ruby program.
861
- @smallexample
862
- 'Yes it does' =~ /
863
- (Yes) \s+
864
- it \s+
865
- does
866
- /ix
867
- puts $1
868
- @end smallexample
869
-
870
- The stopping points that Ruby records are the last two lines, lines 5 and 6.
871
-
872
- Inside @code{byebug} you can get a list of stoppable lines for a file using the
873
- @code{info file} command with the attribute @code{breakpoints}.
874
-
875
- @ifset FINISHED
876
- To be continued...
877
-
878
- @itemize @bullet
879
- @item more complex example with objects, pretty printing and irb.
880
- @item line tracing and non-interactive tracing.
881
- @item mixing in Byebug.debug with byebug
882
- @item post-mortem debugging and setting up for that
883
- @item references to videos
884
- @end itemize
885
- @end ifset
886
-
887
- @node Invocation
888
- @chapter Getting in & out
889
-
890
- @menu
891
- * Starting byebug:: How to enter byebug
892
- * Command Files:: Command files
893
- * Quitting byebug:: How to leave byebug (quit, kill)
894
- * Calling from Program:: Calling byebug from inside your program
895
- * Post-Mortem Debugging:: Enter byebug after an uncaught exception
896
- @end menu
897
-
898
- @node Starting byebug
899
- @section Starting byebug
900
-
901
- Probably the most familiar thing to do is invoke byebug from a command line. A
902
- wrapper shell script called @code{byebug} basically @code{require}'s the gem
903
- package @code{byebug} and then loads @code{byebug}.
904
-
905
- @smallexample
906
- byebug [byebug-options] [--] @var{ruby-script} @var{ruby-script-arguments...}
907
- @end smallexample
908
-
909
- If you don't need to pass dash options to your program which might get confused
910
- with byebug options, then you don't need to add the @option{--}.
911
-
912
- To get a brief list of options and descriptions, use the @code{--help} option.
913
-
914
- @smallexample
915
- $ @b{byebug --help}
916
- byebug @value{BYEBUG_VERSION}
917
- Usage: byebug [options] <script.rb> -- <script.rb parameters>
918
-
919
- Options:
920
- -d, --debug Set $DEBUG=true
921
- -I, --include PATH Add PATH to $LOAD_PATH
922
- -m, --post-mortem Activate post-mortem mode
923
- --no-quit Do not quit when script finishes
924
- --no-stop Do not stop when script is loaded
925
- -nx Don't run any initialization files like .byebugrc
926
- -r, --require SCRIPT Require the library, before executing your script
927
- --restart-script FILE Name of the script file to run. Erased after read
928
- --script FILE Name of the script file to run
929
- -x, --trace Turn on line tracing
930
-
931
- Common options:
932
- --help Show this message
933
- --version Print the version
934
- -v Print version number, then turn on verbose mode
935
- @end smallexample
936
-
937
- Options for the @code{byebug} are shown in the following list.
938
-
939
- @menu
940
- * byebug command-line options:: Options you can pass to byebug
941
- * byebug default options:: How to Set Default Command-Line Options
942
- @end menu
943
-
944
- @node byebug command-line options
945
- @subsection Options you can pass to byebug
946
-
947
- You can run @code{byebug} in various alternative modes, for example, as a
948
- program that interacts directly with the program in the same process on the same
949
- computer or via a socket to another process possibly on a different computer.
950
-
951
- Many options appear as a long option name, such as @option{--help}, and a short
952
- one letter option name, such as @option{-h}. A double dash (@option{--} is used
953
- to separate options which go to @code{byebug} from options that are intended to
954
- go to your Ruby script. Options (if any) to @code{byebug} should come first. If
955
- there is no possibility of the Ruby script to be debugged getting confused with
956
- @code{byebug}'s option, the double dash can be omitted.
957
-
958
- @table @code
959
- @item --help
960
- @cindex @option{-h}
961
- @cindex @option{--help}
962
- This option causes @code{byebug} to print some basic help and exit.
963
-
964
- @item -v | --version
965
- @cindex @option{-v}
966
- This option causes @code{byebug} to print its version number and exit.
967
-
968
- @item --debug
969
- @cindex @option{--debug}
970
- Set @code{$DEBUG} to @code{true}. This option is compatible with Ruby's.
971
-
972
- @item -I --include @var{PATH}
973
- @cindex @option{-I} @var{PATH}
974
- @cindex @option{--include} @var{PATH}
975
- Add @var{PATH} to @code{$LOAD_PATH}
976
-
977
- @item -m | --post-mortem
978
- @cindex @option{-m}
979
- @cindex @option{--post-mortem}
980
- If your program raises an exception that isn't caught you can enter byebug for
981
- inspection of what went wrong. You may also want to use this option in
982
- conjunction with @option{--no-stop}. See also @ref{Post-Mortem Debugging}.
983
-
984
- @item --no-quit
985
- @cindex @option{--no-quit}
986
- Restart byebug when your program terminates normally.
987
-
988
- @item --no-stop
989
- @cindex @option{--no-stop}
990
- Normally the @code{byebug} stops before executing the first statement. If
991
- instead you want it to start running initially and will perhaps break it later
992
- in the running, use this options.
993
-
994
- @item -r | --require @var{library}
995
- @cindex @option{-r}
996
- @cindex @option{--require}
997
- Require the library, before executing your script. However if the library
998
- happened to be @code{debug}, we'll just ignore the require (since we're already
999
- a debugger). This option is compatible with Ruby's.
1000
-
1001
- @item --script @var{file}
1002
- @cindex @option{--script}
1003
- Require the library, before executing your script. However if the library
1004
- happend to be @code{debug}, we'll just ignore the require (since we're already a
1005
- debugger). This option is compatible with Ruby's.
1006
-
1007
- @item -x | --trace
1008
- @cindex @option{-x}
1009
- @cindex @option{--trace}
1010
- Turn on line tracing. Running @command{byebug --trace @emph{rubyscript.rb}}
1011
- is much like running: @command{ruby -rtracer @emph{rubyscript.rb}}
1012
-
1013
- If all you want to do however is get a linetrace, @code{tracer} and not
1014
- @code{byebug}, may be faster:
1015
-
1016
- @smallexample
1017
- $ @b{time ruby -rtracer gcd.rb 34 21 > /dev/null}
1018
-
1019
- real 0m0.266s
1020
- user 0m0.008s
1021
- sys 0m0.000s
1022
- $ @b{time byebug --trace gcd.rb 34 21 > /dev/null}
1023
-
1024
- real 0m0.875s
1025
- user 0m0.448s
1026
- sys 0m0.056s
1027
- $
1028
- @end smallexample
1029
- @end table
1030
-
1031
- @node byebug default options
1032
- @subsection How to Set Default Command-Line Options
1033
-
1034
- @code{byebug} has many command-line options; it seems that some people want to
1035
- set them differently from the defaults. For example, some people may want
1036
- @option{--no-quit --no-control} to be the default behavior. One could write a
1037
- wrapper script or set a shell alias to handle this. But @code{byebug} has
1038
- another way to do this. Before processing command options, if the file
1039
- @code{$HOME/.rdboptrc} is found, it is loaded. If you want to set the defaults
1040
- in some other way, you can put Ruby code here and set variable @code{options}
1041
- which is an OpenStruct. For example here's how you'd set @option{-no-quit} and
1042
- change the default control port to 5000.
1043
-
1044
- @smallexample
1045
- # This file contains how you want the default options to byebug to be set. Any
1046
- # Ruby code can be put here.
1047
- #
1048
- # byebug # Uncomment if you want to debug byebug!
1049
- options.control = false
1050
- options.port = 5000
1051
- puts "rocky's rdboptrc run"
1052
- @end smallexample
1053
-
1054
- Here are the default values in @code{options}
1055
- @smallexample
1056
- #<OpenStruct server=false, client=false, frame_bind=false, cport=8990,
1057
- tracing=false, nx=false, post_mortem=false, port=8989,
1058
- control=true, restart_script=nil, quit=true, stop=true, script=nil,
1059
- host=nil, wait=false>
1060
- @end smallexample
1061
-
1062
- @node Command Files
1063
- @section Command files
1064
-
1065
- @cindex command files
1066
- A command file is a file of lines that are @code{byebug} commands. Comments
1067
- (lines starting with @kbd{#}) may also be included. An empty line in a command
1068
- file does nothing; it does not mean to repeat the last command, as it would from
1069
- the terminal.
1070
-
1071
- @cindex init file
1072
- @cindex @file{.byebugrc}
1073
- When you start @code{byebug}, it automatically executes commands from its
1074
- @dfn{init files}, normally called @file{.byebugrc}. On some configurations of
1075
- @code{byebug}, the init file may be known by a different name.
1076
-
1077
- During startup, @code{byebug} does the following:
1078
-
1079
- @enumerate
1080
- @item
1081
- Processes command line options and operands.
1082
-
1083
- @item
1084
- Reads the init file in your current directory, if any, and then checks your home
1085
- directory. The home directory is the directory named in the @code{HOME} or
1086
- @code{HOMEPATH} environment variable. Thus, you can have more than one init
1087
- file, one generic in your home directory, and another, specific to the program
1088
- you are debugging, in the directory where you invoke @code{byebug}.
1089
-
1090
- @item
1091
- Reads command files specified by the @samp{--script} option.
1092
- @end enumerate
1093
-
1094
- You can also request the execution of a command file with the @code{source}
1095
- command, @pxref{Source}.
1096
-
1097
- @node Quitting byebug
1098
- @section Quitting byebug
1099
-
1100
- Inside a byebug interpreter, use @code{quit} command (
1101
- @pxref{Control, ,Quitting byebug}).
1102
-
1103
- Another way to terminate byebug is to use the @code{kill} command. This does the
1104
- more forceful @code{kill -9}. It can be used in cases where @code{quit} doesn't
1105
- work.
1106
-
1107
- @node Calling from Program
1108
- @section Calling byebug from inside your Ruby program
1109
-
1110
- Running a program from byebug adds a bit of overhead and slows down your program
1111
- a little. Furthermore, by necessity, debuggers change the operation of the
1112
- program they are debugging. And this can lead to unexpected and unwanted
1113
- differences. It has happened so often that the term ``Heisenbugs'' (see
1114
- @url{http://en.wikipedia.org/wiki/Heisenbug}) was coined to describe the
1115
- situation where using a debugger (among other possibilities) changes the
1116
- behavior of the program so that the bug doesn't manifest itself anymore.
1117
-
1118
- There is another way to get into byebug which adds no overhead or slowdown until
1119
- you reach the point at which you want to start debugging. However here you must
1120
- change the script and make an explicit call to byebug. Because byebug isn't
1121
- involved before the first call, there is no overhead and the script will run
1122
- at the same speed as if there were no byebug.
1123
-
1124
- There are three parts to calling byebug from inside the script, ``requiring''
1125
- the gem, telling byebug to start tracking things and then making an explicit
1126
- breakpoints.
1127
-
1128
- To get byebug class accessible from your Ruby program:
1129
- @smallexample
1130
- require 'byebug'
1131
- @end smallexample
1132
-
1133
- After @code{require 'byebug'}, it's possible to set some of the byebug variables
1134
- influence preferences. For example if you want to have @code{byebug} run a
1135
- @code{list} command every time it stops you set the variable
1136
- @code{Byebug.settings[:autolist]}. @pxref{Byebug.settings} has a list of
1137
- variable settings and the default values. Byebug settings can also be set in
1138
- @code{.byebugrc} as byebug commands. @pxref{Command Files}
1139
-
1140
- To tell byebug to start tracking things:
1141
- @smallexample
1142
- Byebug.start
1143
- @end smallexample
1144
-
1145
- There is also a @code{Byebug.stop} to turn off byebug tracking. If speed is
1146
- crucial, you may want to start and stop this around certain sections of code.
1147
- Alternatively, instead of issuing an explicit @code{Byebug.stop} you can add a
1148
- block to the @code{Byebug.start} and debugging is turned on for that block. If
1149
- the block of code raises an uncaught exception that would cause the block to
1150
- terminate, the @code{stop} will occur. See @ref{Byebug.start with a block}.
1151
-
1152
- And finally to enter byebug:
1153
- @smallexample
1154
- byebug
1155
- @end smallexample
1156
-
1157
- As indicated above, when @code{byebug} is run a @code{.byebugrc} profile is read
1158
- if that file exists.
1159
-
1160
- You may want to enter byebug at several points in the program where there is a
1161
- problem you want to investigate. And since @code{byebug} is just a method call
1162
- it's possible enclose it in a conditional expression, for example:
1163
- @smallexample
1164
- byebug if 'bar' == foo and 20 == iter_count
1165
- @end smallexample
1166
-
1167
- Although each step does a very specific thing which offers great flexibility, in
1168
- order to make getting into byebug easier the three steps have been rolled into
1169
- one command:
1170
- @smallexample
1171
- require "byebug/byebug"
1172
- @end smallexample
1173
-
1174
- @node Byebug Command Reference
1175
- @chapter @code{byebug} Command Reference
1176
-
1177
- @menu
1178
- * Command Interfaces:: The kinds of interface used to interact with byebug
1179
- * Command Syntax:: How to give commands to byebug
1180
- * Command Output:: How byebug presents its output
1181
- * Help:: How to ask for help (help)
1182
- * Control:: Controlling byebug (quit, restart)
1183
- * DisplayCommands:: Executing expressions on stop (display, undisplay)
1184
- * PrintCommands:: Evaluating and Printing Expressions (p, pp, ps, pp, irb)
1185
- * PrintVars:: Printing Variables (var)
1186
- * List:: Examining Program Source Files (list)
1187
- * Edit:: Editing source files (edit)
1188
- * FrameCommands:: Examining the stack frame (where, up, down, frame)
1189
- * Stopping:: Stopping and continuing (break, watch, step, cont...)
1190
- * byebug settings:: byebug-settings (set args, set autoeval, ...)
1191
- * Program Information:: Program Status (info)
1192
- @end menu
1193
-
1194
- @node Command Interfaces
1195
- @section Command Interfaces
1196
- There are several ways one can talk to @code{byebug} and get results. The
1197
- simplest way is via a command-line interface directly talking to byebug. This is
1198
- referred to below as a ``Local Interface''. It's also possible to run byebug and
1199
- set up a port by which some other process can connect and control the debug
1200
- session. This is called a ``Remote Interface''. When you want to gain access to
1201
- a remote interface you need to run @code{byebug} using a ``Control Interface''.
1202
- This interface might not be the same process as the process running the debugged
1203
- program and might not even be running on the same computer.
1204
-
1205
- Other front-ends may use one of these and build on top and provide other
1206
- (richer) interfaces. Although many of the commands are available on all
1207
- interfaces some are not. Most of the time in this manual when we talk about
1208
- issuing commands describing the responses elicited, we'll assume we are working
1209
- with the local interface.
1210
-
1211
- @node Command Syntax
1212
- @section Command Syntax
1213
- Usually a command is put on a single line. There is no limit on how long it can
1214
- be. It starts with a command name, which is followed by arguments whose meaning
1215
- depends on the command name. For example, the command @code{step} accepts an
1216
- argument which is the number of times to step, as in @code{step 5}. You can also
1217
- use the @code{step} command with no arguments. Some commands do not allow any
1218
- arguments.
1219
-
1220
- Multiple commands can be put on a line by separating each with a semicolon
1221
- (@code{;}). You can disable the meaning of a semicolon to separate commands by
1222
- escaping it with a backslash.
1223
-
1224
- For example, if you have @code{autoeval} (@ref{Autoeval}) set, you might want to
1225
- enter the following code to compute the 5th Fibonacci number:
1226
- @smallexample
1227
- # Compute the 5 Fibonaci number
1228
- (byebug:1) set autoeval on
1229
- (byebug:1) fib1=0; fib2=1; 5.times @{|temp| temp=fib1; fib1=fib2; fib2 += temp @}
1230
- SyntaxError Exception: compile error
1231
- /usr/bin/irb:10: syntax error, unexpected $end, expecting '@}'
1232
- 5.times @{|temp| temp=fib1
1233
- ^
1234
- (byebug:1) fib1=0\; fib2=1\; 5.times @{|temp| temp=fib1\; fib1=fib2\; fib2 += temp @}
1235
- 5
1236
- (byebug:1) fib2
1237
- fib2
1238
- 8
1239
- @end smallexample
1240
-
1241
- You might also consider using the @code{irb} command, @ref{irb}, and then you
1242
- won't have to escape semicolons.
1243
-
1244
- A blank line as input (typing just @key{<RET>}) means to repeat the previous
1245
- command.
1246
-
1247
- In the ``local'' interface, the Ruby Readline module is used. It handles line
1248
- editing and retrieval of previous commands. Up arrow, for example moves to the
1249
- previous byebug command; down arrow moves to the next more recent command
1250
- (provided you are not already at the last command). Command history is saved in
1251
- file @code{.byebug_hist}. A limit is put on the history size. You can see this
1252
- with the @code{show history size} command. See @ref{History} for history
1253
- parameters.
1254
-
1255
- @node Command Output
1256
- @section Command Output
1257
- In the command-line interface, when @code{byebug} is waiting for input it
1258
- presents a prompt of the form @code{(byebug)}. If the program has terminated
1259
- normally the prompt will be @code{(byebug:ctrl)} and in post-mortem debugging it
1260
- will be @code{(byebug:post-mortem)}.
1261
-
1262
- In the local interface, whenever @code{byebug} gives an error message such as
1263
- for an invalid command, or an invalid location position, it will generally
1264
- preface the message with @code{***}.
1265
-
1266
- @node Help
1267
- @section Getting help (@samp{help})
1268
- @cindex on-line documentation
1269
- @menu
1270
- * Help for Subcommands::
1271
- @end menu
1272
-
1273
- Once inside @code{byebug} you can always ask it for information on its commands
1274
- using the @code{help} command.
1275
-
1276
- @table @code
1277
- @kindex h @r{(@code{help})}
1278
- @kindex help @ovar{command-name}
1279
- @item help
1280
- @itemx h
1281
- You can use @code{help} (abbreviated @code{h}) with no arguments to display a
1282
- short list of named classes of commands:
1283
-
1284
- @flushleft
1285
- @smallexample
1286
- (byebug:1) @b{help}
1287
- byebug help v@value{BYEBUG_VERSION}
1288
- Type 'help <command-name>' for help on a specific command
1289
-
1290
- Available commands:
1291
- backtrace delete enable help method ps save step where
1292
- break disable eval info next putl set trace
1293
- catch display exit irb p quit show undisplay
1294
- condition down finish kill pp reload skip up
1295
- continue edit frame list pry restart source var
1296
- @end smallexample
1297
- @end flushleft
1298
- @c the above line break eliminates huge line overfull...
1299
-
1300
- @end table
1301
-
1302
- @table @code
1303
- @item help @var{command}
1304
- With a command name as @code{help} argument, @code{byebug} displays short
1305
- information on how to use that command.
1306
-
1307
- @smallexample
1308
- (byebug:1) @b{help list}
1309
- byebug help v@value{BYEBUG_VERSION}
1310
- l[ist] list forward
1311
- l[ist] - list backward
1312
- l[ist] = list current line
1313
- l[ist] nn-mm list given lines
1314
- * NOTE - to turn on autolist, use 'set autolist'
1315
- (byebug:1)
1316
- @end smallexample
1317
- @end table
1318
-
1319
- @node Help for Subcommands
1320
- @subsection Help on Subcommands
1321
- A number of commands have many sub-parameters or @emph{subcommands}. These
1322
- include @code{info}, @code{set}, @code{show}, @code{enable} and @code{disable}.
1323
-
1324
- When you ask for help for one of these commands, you will get help for all of
1325
- the subcommands that that command offers. Sometimes you may want help that
1326
- subcommand and to do this just follow the command with its subcommand name. For
1327
- example @code{help info breakpoints} will just give help about the
1328
- @code{info breakpoints} command. Furthermore it will give longer help than the
1329
- summary information that appears when you ask for help. You don't need to list
1330
- the full subcommand name, but just enough of the letters to make that subcommand
1331
- distinct from others will do. For example, @code{help info b} is the same as
1332
- @code{help info breakpoints}.
1333
-
1334
- Some examples follow.
1335
- @example
1336
- (byebug:1) @b{help info}
1337
- Generic command for showing things about the program being debugged.
1338
- --
1339
- List of info subcommands:
1340
- --
1341
- info args -- Argument variables of current stack frame
1342
- info breakpoints -- Status of user-settable breakpoints
1343
- info catch -- Exceptions that can be caught in the current stack frame
1344
- info display -- Expressions to display when program stops
1345
- info file -- Info about a particular file read in
1346
- info files -- File names and timestamps of files read in
1347
- info global_variables -- Global variables
1348
- info instance_variables -- Instance variables of the current stack frame
1349
- info line -- Line number and file name of current position in source file
1350
- info locals -- Local variables of the current stack frame
1351
- info program -- Execution status of the program
1352
- info stack -- Backtrace of the stack
1353
- info variables -- Local and instance variables of the current stack frame
1354
- @end example
1355
-
1356
- @example
1357
- (byebug:1) @b{help info breakpoints}
1358
- Status of user-settable breakpoints.
1359
- Without argument, list info about all breakpoints.
1360
- With an integer argument, list info on that breakpoint.
1361
- @end example
1362
-
1363
- @example
1364
- (byebug:1) @b{help info br}
1365
- Status of user-settable breakpoints.
1366
- Without argument, list info about all breakpoints.
1367
- With an integer argument, list info on that breakpoint.
1368
- @end example
1369
-
1370
- @node Control
1371
- @section Controlling byebug (@samp{quit}, @samp{restart}, @samp{source})
1372
-
1373
- @menu
1374
- * Quit:: Quitting byebug (quit)
1375
- * Restart:: Restarting script execution (restart)
1376
- * Source:: Running Byebug commands (source)
1377
- @end menu
1378
-
1379
- @node Quit
1380
- @subsection Quit (@samp{quit})
1381
-
1382
- @table @code
1383
- @kindex quit @r{[}unconditionally@r{]}
1384
- @kindex q @r{(@code{quit})}
1385
- @item quit @r{[}unconditionally@r{]}
1386
- @item exit
1387
- @itemx q
1388
-
1389
- To exit @code{byebug}, use the @code{quit} command (abbreviated @code{q}), or
1390
- alias @code{exit}.
1391
-
1392
- Normally if you are in an interactive session, this command will prompt to ask
1393
- if you really want to quit. If you don't want any questions asked, enter
1394
- ``unconditionally''.
1395
- @end table
1396
-
1397
- @node Restart
1398
- @subsection Restarting script execution (@samp{restart})
1399
-
1400
- @table @code
1401
- @kindex restart @r{[}@var{program args}@r{]}
1402
- @kindex R @r{(@code{restart})}
1403
- @item restart
1404
- @itemx R
1405
- Restart the program. This is a re-exec - all byebug state is lost. If command
1406
- arguments are passed those are used. Otherwise program arguments from the last
1407
- invocation are used.
1408
-
1409
- You won't be able to restart your program in all cases. First, the program
1410
- should have been invoked at the outset rather than having been called from
1411
- inside your program or invoked as a result of post-mortem handling.
1412
-
1413
- Also, since this relies on the the OS @code{exec} call, this command is
1414
- available only if your OS supports @code{exec}; OSX for example does not (yet).
1415
- @end table
1416
-
1417
- @node Source
1418
- @subsection Running Byebug Commands (@samp{source})
1419
-
1420
- @table @code
1421
- @kindex source @var{filename}
1422
- @item source @var{filename}
1423
- Execute the command file @var{filename}.
1424
-
1425
- The lines in a command file are executed sequentially. They are not printed as
1426
- they are executed. If there is an error, execution proceeds to the next command
1427
- in the file. For information about command files that get run automatically on
1428
- startup, @pxref{Command Files}.
1429
- @end table
1430
-
1431
- @node DisplayCommands
1432
- @section Executing expressions on stop (@samp{display}, @samp{undisplay})
1433
- @cindex automatic display
1434
- @cindex display of expressions
1435
-
1436
- If you find that you want to print the value of an expression frequently (to see
1437
- how it changes), you might want to add it to the @dfn{automatic display list} so
1438
- that @code{byebug} evaluates a statement each time your program stops or the
1439
- statement is shown in line tracing. Each expression added to the list is given a
1440
- number to identify it; to remove an expression from the list, you specify that
1441
- number. The automatic display looks like this:
1442
-
1443
- @smallexample
1444
- (byebug:1) display n
1445
- 1: n = 3
1446
- @end smallexample
1447
-
1448
- @noindent
1449
- This display shows item numbers, expressions and their current values. If the
1450
- expression is undefined or illegal the expression will be printed but no value
1451
- will appear.
1452
-
1453
- @smallexample
1454
- (byebug:1) display undefined_variable
1455
- 2: undefined_variable =
1456
- (byebug:1) display 1/0
1457
- 3: 1/0 =
1458
- @end smallexample
1459
-
1460
- Note: this command uses @code{to_s} in expressions; for example an array
1461
- @code{[1, 2]} will appear as @code{12}. For some datatypes like an Array, you
1462
- may want to call the @code{inspect} method, for example
1463
- @code{display ARGV.inspect} rather than @code{display ARGV}.
1464
-
1465
- @table @code
1466
- @kindex display @ovar{expr}
1467
- @item display @var{expr}
1468
- Add the expression @var{expr} to the list of expressions to display each time
1469
- your program stops or a line is printed when linetracing is on
1470
- (@pxref{DisplayCommands}).
1471
-
1472
- @item display
1473
- Display the current values of the expressions on the list, just as is done when
1474
- your program stops.
1475
-
1476
- @kindex undisplay @ovar{num}
1477
- @item undisplay @ovar{num}
1478
- @itemx delete display @var{num}
1479
- Remove item number @var{num} from the list of expressions to display.
1480
-
1481
- @kindex info display
1482
- @item info display
1483
- Show all display expressions
1484
-
1485
- @ifset GDB_COMPLETED
1486
- @code{undisplay} does not repeat if you press @key{RET} after using it.
1487
- (Otherwise you would just get the error @samp{No display number @dots{}}.)
1488
- @end ifset
1489
-
1490
- @kindex disable display
1491
- @item disable display @var{dnums}@dots{}
1492
- Disable the display of item numbers @var{dnums}. A disabled display item is not
1493
- printed automatically, but is not forgotten. It may be enabled again later.
1494
-
1495
- @kindex enable display
1496
- @item enable display @var{dnums}@dots{}
1497
- Enable display of item numbers @var{dnums}. It becomes effective once again in
1498
- auto display of its expression, until you specify otherwise.
1499
-
1500
- @end table
1501
-
1502
- @node PrintCommands
1503
- @section Evaluating and Printing Expressions (@samp{p}, @samp{pp}, @samp{putl}, @samp{ps}, @samp{irb})
1504
-
1505
- One way to examine and change data in your script is with the @code{eval}
1506
- command (abbreviated @code{p}). A similar command is @code{pp} which tries to
1507
- pretty print the result. Finally @code{irb} is useful when you anticipate
1508
- examining or changing a number of things and prefer not to have to preface each
1509
- command, but rather work as one does in @code{irb}.
1510
-
1511
- @menu
1512
- * eval:: eval or print an expression (eval, p)
1513
- * pp:: pretty print an expression (pp, ps, putl)
1514
- * irb:: running irb using the current context
1515
- @end menu
1516
-
1517
- @node eval
1518
- @subsection Printing an expression (@samp{eval}, @samp{p})
1519
- @table @code
1520
- @kindex eval @var{expr}
1521
- @kindex p @r{(@code{eval})}
1522
- @item eval @var{expr}
1523
- @itemx p @var{expr}
1524
-
1525
- Use @code{eval} or @code{p} to evaluate a Ruby expression, @var{expr}, same as
1526
- you would if you were in @code{irb}. If there are many expressions you want to
1527
- look at, you may want to go into irb from byebug.
1528
-
1529
- @smallexample
1530
- @group
1531
- (byebug:p) p n
1532
- 3
1533
- (byebug:1) p "the value of n is #@{n@}"
1534
- "the value of n is 3"
1535
- (byebug:1)
1536
- @end group
1537
- @end smallexample
1538
- @end table
1539
-
1540
- @node pp
1541
- @subsection Pretty-Printing an expression (@samp{pp}, @samp{putl}, @samp{ps}))
1542
- @table @code
1543
- @item pp
1544
- @kindex pp @var{expr}
1545
- Evaluates and pretty-prints @var{expr}
1546
- @smallexample
1547
- @group
1548
- (byebug:1) @b{p $LOAD_PATH}
1549
- ["/home/rocky/lib/ruby", "/usr/lib/ruby/site_ruby/1.8", "/usr/lib/ruby/site_ruby/1.8/i586-linux", "/usr/lib/ruby/1.8"]
1550
- (byebug:1) @b{pp $LOAD_PATH}
1551
- ["/home/rocky/lib/ruby",
1552
- "/usr/lib/ruby/site_ruby/1.8",
1553
- "/usr/lib/ruby/site_ruby/1.8/i586-linux",
1554
- "/usr/lib/ruby/1.8"]
1555
- @end group
1556
- @end smallexample
1557
-
1558
- @kindex putl
1559
- @item putl
1560
- If the value you want to print is an array, sometimes a columnized list looks
1561
- nicer:
1562
- @smallexample
1563
- @group
1564
- (byebug:1) @b{putl $LOAD_PATH}
1565
- /home/rocky/lib/ruby /usr/lib/ruby/site_ruby/1.8
1566
- /usr/lib/ruby/site_ruby/1.8/i586-linux /usr/lib/ruby/1.8
1567
- @end group
1568
- @end smallexample
1569
-
1570
- Note however that entries are sorted to run down first rather than across. So
1571
- in the example above the second entry in the list is
1572
- @code{/usr/lib/ruby/site_ruby/1.8/i586-linux} and the @emph{third} entry is
1573
- @code{/usr/lib/ruby/site_ruby/1.8}.
1574
-
1575
- If the value is not an array @code{putl} will just call pretty-print.
1576
-
1577
- @kindex ps
1578
- @item ps
1579
- Sometimes you may want to print the array not only columnized, but sorted as
1580
- well. The list of byebug help commands appears this way, and so does the output
1581
- of the @code{method} commands.
1582
-
1583
- @smallexample
1584
- @group
1585
- (byebug:1) ps Kernel.private_methods
1586
- Digest initialize y
1587
- Pathname initialize_copy
1588
- Rational location_of_caller
1589
- active_gem_with_options method_added
1590
- alias_method method_removed
1591
- append_features method_undefined
1592
- attr module_function
1593
- attr_accessor private
1594
- attr_reader protected
1595
- attr_writer public
1596
- class_variable_get remove_class_variable
1597
- class_variable_set remove_const
1598
- define_method remove_instance_variable
1599
- extend_object remove_method
1600
- extended singleton_method_added
1601
- gcd singleton_method_removed
1602
- gem_original_require singleton_method_undefined
1603
- include timeout
1604
- included undef_method
1605
- @end group
1606
- @end smallexample
1607
-
1608
- If the value is not an array, @code{ps} will just call pretty-print. See also
1609
- the @code{methods}.
1610
- @end table
1611
-
1612
- @node irb
1613
- @subsection Run irb (@samp{irb})
1614
- @table @code
1615
- @kindex irb
1616
- @item irb
1617
- Run an interactive ruby session (@code{irb}) with the bindings environment set
1618
- to the state you are in the program.
1619
-
1620
- When you leave irb and go back to byebug command prompt we show again the file,
1621
- line and text position of the program in the same way as when entered byebug. If
1622
- you issue a @command{list} without location information, the default location
1623
- used is the current line rather than the position may have gotten updated via a
1624
- prior @command{list} command.
1625
-
1626
- @smallexample
1627
- triangle.rb:4
1628
- def triangle(n)
1629
- (byebug:1) @b{list}
1630
- [1, 8] in /home/rocky/ruby/triangle.rb
1631
- 1 #!/usr/bin/env ruby
1632
- 2 # Compute the n'th triangle number - the hard way
1633
- 3 # triangle(n) == (n * (n+1)) / 2
1634
- => 4 def triangle(n)
1635
- 5 tri = 0
1636
- 6 0.upto(n) do |i|
1637
- 7 tri += i
1638
- 8 end
1639
- @b{irb}
1640
- >> @b{(0..6).inject@{|sum, i| sum +=i@}}
1641
- => 21
1642
- >> @b{exit}
1643
- triangle.rb:4
1644
- def triangle(n)
1645
- (byebug:1) @b{list # Note we get the same line range as before going into irb}
1646
- [1, 8] in /home/rocky/ruby/triangle.rb
1647
- 1 #!/usr/bin/env ruby
1648
- 2 # Compute the n'th triangle number - the hard way
1649
- 3 # triangle(n) == (n * (n+1)) / 2
1650
- => 4 def triangle(n)
1651
- 5 tri = 0
1652
- 6 0.upto(n) do |i|
1653
- 7 tri += i
1654
- 8 end
1655
- @end smallexample
1656
-
1657
- @end table
1658
-
1659
- @node PrintVars
1660
- @section Printing Variables (@samp{var}, @samp{method})
1661
-
1662
- @table @code
1663
- @item var const @var{object}
1664
- @kindex var const @var{expr}
1665
- Show the constants of @var{object}. This is basically listing
1666
- variables and their values in @var{object}@code{.constant}.
1667
- @item var instance @var{object}
1668
- @kindex var instance @var{expr}
1669
- Show the instance variables of @var{object}. This is basically listing
1670
- @var{object}@code{.instance_variables}.
1671
- @item info instance_variables
1672
- @kindex info instance_variables
1673
- Show instance_variables of @code{@@self}
1674
- @item info locals
1675
- @kindex info locals
1676
- Show local variables
1677
- @item info globals
1678
- @kindex info globals
1679
- Show global variables
1680
- @item info variables
1681
- @kindex info variables
1682
- Show local and instance variables of @code{@@self}
1683
- @item method instance @var{object}
1684
- @kindex method instance @var{object}
1685
- Show methods of @var{object}. Basically this is the same as running
1686
- @code{ps object.instance_methods(false)} on @var{object}.
1687
- @item method iv @var{object}
1688
- @kindex method iv @var{object}
1689
- Show method instance variables of @var{object}. Basically this is the same as
1690
- running
1691
- @smallexample
1692
- obj.instance_variables.each do |v|
1693
- puts "%s = %s\n" % [v, obj.instance_variable_get(v)]
1694
- end
1695
- @end smallexample
1696
- on @var{object}.
1697
- @item signature @var{object}
1698
- @kindex method signature @var{object}
1699
- Show procedure signature of method @var{object}.
1700
- @emph{This command is available only if the nodewrap is installed.}
1701
- @smallexample
1702
- def mymethod(a, b=5, &bock)
1703
- end
1704
- (byebug:1) @b{method sig mymethod}
1705
- Mine#mymethod(a, b=5, &bock)
1706
- @end smallexample
1707
- on @var{object}.
1708
- @item method @var{class-or-module}
1709
- @kindex method @var{class-or-module}
1710
- Show methods of the class or module, @var{class-or-module}. Basically this is
1711
- the same as running @code{ps object.methods} on @var{class-or-module}.
1712
- @end table
1713
-
1714
- @node List
1715
- @section Examining Program Source Files (@samp{list})
1716
-
1717
- @cindex current line
1718
- @code{byebug} can print parts of your script's source. When your script stops,
1719
- @code{byebug} spontaneously prints the line where it stopped and the text of
1720
- that line. Likewise, when you select a stack frame (@pxref{Selection})
1721
- @code{byebug} prints the line where execution in that frame has stopped.
1722
- Implicitly there is a default line location. Each time a list command is run
1723
- that implicit location is updated, so that running several list commands in
1724
- succession shows a contiguous block of program text.
1725
-
1726
- If you don't need code context displayed every time, you can issue the @code{set
1727
- noautolist} command. Now whenever you want code listed, you can explicitly issue
1728
- the @code{list} or it abbreviation @code{l}. Notice that a second listing is
1729
- displayed, we continue listing from the place we last left off. The desired
1730
- range of lines this time is lines 9 to 18; but since the program ends at line
1731
- 13, the range is moved down so 10 lines can be shown. You can set the
1732
- @code{noautolist} option by default by dropping @code{set noautolist} in
1733
- byebug's startup file @code{.byebugrc}.
1734
-
1735
- If you want to set how many lines to print by default rather than use the
1736
- initial number of lines, 10, use the @code{set listsize} command
1737
- (@pxref{Listsize}). To see the entire program in one shot, we gave an explicit
1738
- starting and ending line number.
1739
-
1740
- You can print other portions of source files by giving an explicit position as a
1741
- parameter to the list command.
1742
-
1743
- @kindex list @ovar{line-number}
1744
- @kindex l @r{(@code{list})}
1745
- To print lines from a source file, use the @code{list} command
1746
- (abbreviated @code{l}). By default, ten lines are printed. Fewer may
1747
- appear if there fewer lines before or after the current line to center
1748
- the listing around.
1749
-
1750
- There are several ways to specify what part of the file you want to print.
1751
- Here are the forms of the @code{list} command.
1752
-
1753
- @table @code
1754
- @item list @var{line-number}
1755
- @itemx l @var{line-number}
1756
- Print lines centered around line number @var{line-number} in the
1757
- current source file.
1758
-
1759
- @item list
1760
- @itemx l
1761
- Print more lines. If the last lines printed were printed with a
1762
- @code{list} command, this prints lines following the last lines
1763
- printed; however, if the last line printed was a solitary line printed
1764
- as part of displaying a stack frame (@pxref{Frames}), this prints lines
1765
- centered around that line.
1766
-
1767
- @item list -
1768
- @itemx l -
1769
- Print lines just before the lines last printed.
1770
- @item list @var{first}-@var{last}
1771
- Print lines between @var{first} and @var{last} inclusive.
1772
-
1773
- @item list =
1774
- Print lines centered around where the script is stopped.
1775
- @end table
1776
-
1777
- Repeating a @code{list} command with @key{RET} discards the argument, so it is
1778
- equivalent to typing just @code{list}. This is more useful than listing the
1779
- same lines again. An exception is made for an argument of @samp{-}; that
1780
- argument is preserved in repetition so that each repetition moves up in the
1781
- source file.
1782
-
1783
- @node Edit
1784
- @section Editing Source files (@samp{edit})
1785
-
1786
- To edit the lines in a source file, use the @code{edit} command. The editing
1787
- program of your choice is invoked with the current line set to the active line
1788
- in the program. Alternatively, you can give a line specification to specify
1789
- what part of the file you want to print if you want to see other parts of the
1790
- program.
1791
-
1792
- You can customize to use any editor you want by using the @code{EDITOR}
1793
- environment variable. The only restriction is that your editor (say @code{ex})
1794
- recognizes the following command-line syntax:
1795
- @smallexample
1796
- ex +@var{number} file
1797
- @end smallexample
1798
- The optional numeric value +@var{number} specifies the number of the line in the
1799
- file where to start editing. For example, to configure @code{byebug} to use the
1800
- @code{vi} editor, you could use these commands with the @code{sh} shell:
1801
-
1802
- @smallexample
1803
- EDITOR=/usr/bin/vi
1804
- export EDITOR
1805
- gdb @dots{}
1806
- @end smallexample
1807
- or in the @code{csh} shell,
1808
- @smallexample
1809
- setenv EDITOR /usr/bin/vi
1810
- gdb @dots{}
1811
- @end smallexample
1812
-
1813
- @table @code
1814
- @kindex edit @ovar{line-specification}
1815
- @item edit @ovar{line specification}
1816
- Edit line specification using the editor specified by the @code{EDITOR}
1817
- environment variable.
1818
- @end table
1819
-
1820
- @node FrameCommands
1821
- @section Examining the Stack Frame (@samp{where}, @samp{up}, @samp{down}, @samp{frame})
1822
-
1823
- When your script has stopped, one thing you'll probably want to know is where it
1824
- stopped and some idea of how it got there.
1825
-
1826
- @cindex call stack
1827
- Each time your script performs a function or sends a message to a method, or
1828
- enters a block, information about this action is saved. The frame stack then is
1829
- a history of the blocks that got you to the point that you are currently stopped
1830
- at.@footnote{More accurately we should call this a ``block stack''; but we'll
1831
- use the name that is more commonly used. And internally in Ruby, there is
1832
- ``FRAME'' structure which is yet slightly different.}
1833
-
1834
- @cindex selected block
1835
- One entry in call stack is @dfn{selected} by @code{byebug} and many
1836
- @code{byebug} commands refer implicitly to the selected block. In particular,
1837
- whenever you ask @code{byebug} to list lines without giving a line number or
1838
- location the value is found in the selected frame. There are special
1839
- @code{byebug} commands to select whichever frame you are interested in.
1840
- @xref{Selection, ,Selecting a frame}.
1841
-
1842
- When your program stops, @code{byebug} automatically selects the currently
1843
- executing frame and describes it briefly, similarly to the @code{frame} command.
1844
-
1845
- After switching frames, when you issue a @code{list} command without any
1846
- position information, the position used is the location in the frame that you
1847
- just switched to, rather than a location that got updated via a prior
1848
- @code{list} command.
1849
-
1850
- @menu
1851
- * Frames:: Stack frames
1852
- * Backtrace:: Backtraces (where)
1853
- * Selection:: Selecting a frame (up, down, frame)
1854
- @end menu
1855
-
1856
- @node Frames
1857
- @subsection Stack frames
1858
-
1859
- @cindex frame, definition
1860
- @cindex stack frame
1861
- The block stack is divided up into contiguous pieces called @dfn{stack frames},
1862
- @dfn{frames}, or @dfn{blocks} for short; each frame/block has a scope associated
1863
- with itr. It contains a line number and the source-file name that the line
1864
- refers to. If the frame/block is the beginning of a method or function it also
1865
- contains the function name.
1866
-
1867
- @cindex initial frame
1868
- @cindex outermost frame
1869
- @cindex innermost frame
1870
- When your script is started, the stack has only one frame, that of the function
1871
- @code{main}. This is called the @dfn{initial} frame or the @dfn{outermost}
1872
- frame. Each time a function is called, a new frame is made. Each time a function
1873
- returns, the frame for that function invocation is eliminated. If a function is
1874
- recursive, there can be many frames for the same function. The frame for the
1875
- function in which execution is actually occurring is called the @dfn{innermost}
1876
- frame. This is the most recently created of all the stack frames that still
1877
- exist.
1878
-
1879
- @cindex frame number
1880
- @code{byebug} assigns numbers to all existing stack frames, starting with zero
1881
- for the innermost frame, one for the frame that called it, and so on upward.
1882
- These numbers do not really exist in your script; they are assigned by
1883
- @code{byebug} to give you a way of designating stack frames inside commands.
1884
-
1885
- @node Backtrace
1886
- @subsection Backtraces (@samp{where})
1887
-
1888
- @cindex backtraces
1889
- @cindex tracebacks
1890
- @cindex stack traces
1891
- A backtrace is essentially the same as the call stack: a summary of how your
1892
- script got where it is. It shows one line per frame, for many frames, starting
1893
- with the place that you are stopped at (frame zero), followed by its caller
1894
- (frame one), and on up the stack.
1895
-
1896
- @table @code
1897
- @kindex where
1898
- @kindex w @r{(@code{where})}
1899
- @itemx where
1900
- Print the entire stack frame; @code{info stack} is an alias for this command.
1901
- Each frame is numbered and can be referred to in the @code{frame} command;
1902
- @code{up} and @code{down} add or subtract respectively to frame numbers shown. The position of the current frame is marked with
1903
- @code{-->}.
1904
-
1905
- @smallexample
1906
- (byebug:1) where
1907
- --> #0 Object.gcd(a#Fixnum, b#Fixnum) at /tmp/gcd.rb:6
1908
- #1 at /tmp/gcd.rb:19
1909
- @end smallexample
1910
-
1911
- @ifset FINISHED
1912
- @item backtrace @var{n}
1913
- @itemx bt @var{n}
1914
- @itemx where @var{n}
1915
- @itemx T @var{n}
1916
- Similar, but print only the innermost @var{n} frames.
1917
-
1918
- @item backtrace -@var{n}
1919
- @itemx bt -@var{n}
1920
- @itemx where -@var{n}
1921
- @itemx T -@var{n}
1922
- Similar, but print only the outermost @var{n} frames.
1923
- @end ifset
1924
- @end table
1925
-
1926
- @node Selection
1927
- @subsection Selecting a frame (@samp{up}, @samp{down}, @samp{frame})
1928
- Commands for listing source code in your script work on whichever stack frame is
1929
- selected at the moment. Here are the commands for selecting a stack frame; all
1930
- of them finish by printing a brief description of the stack frame just selected.
1931
-
1932
- @table @code
1933
- @kindex up @ovar{n}
1934
- @item up @ovar{n}
1935
- Move @var{n} frames up the stack. For positive numbers @var{n}, this advances
1936
- toward the outermost frame, to higher frame numbers, to frames that have existed
1937
- longer. Using a negative @var{n} is the same thing as issuing a @code{down}
1938
- command of the absolute value of the @var{n}. Using zero for @var{n} does no
1939
- frame adjustment, but since the current position is redisplayed, it may trigger
1940
- a resynchronization if there is a front end also watching over things.
1941
-
1942
- @var{n} defaults to one. You may abbreviate @code{up} as @code{u}.
1943
-
1944
- @kindex down @ovar{n}
1945
- @item down @ovar{n}
1946
- Move @var{n} frames down the stack. For positive numbers @var{n}, this advances
1947
- towards the innermost frame, to lower frame numbers, to frames that were created
1948
- more recently. Using a negative @var{n} is the same as issuing a @code{up}
1949
- command of the absolute value of the @var{n}. Using zero for @var{n} does no
1950
- frame adjustment, but since the current position is redisplayed, it may trigger
1951
- a resynchronization if there is a front end also watching over things.
1952
-
1953
- @var{n} defaults to one.
1954
- @end table
1955
-
1956
- @table @code
1957
- @kindex frame @r{[} @ovar{n}@r{]}
1958
- @cindex current stack frame
1959
- @item frame@r{[} @ovar{n}@r{]}
1960
- The @code{frame} command allows you to move from one stack frame to another, and
1961
- to print the stack frame you select. @var{n} is the the stack frame number or 0
1962
- if no frame number is given; @code{frame 0} then will always show the current
1963
- and most recent stack frame.
1964
-
1965
- If a negative number is given, counting is from the other end of the stack
1966
- frame, so @code{frame -1} shows the least-recent, outermost or most ``main''
1967
- stack frame.
1968
-
1969
- Without an argument, @code{frame} prints the current stack frame. Since the
1970
- current position is redisplayed, it may trigger a resynchronization if there is
1971
- a front end also watching over things.
1972
- @end table
1973
-
1974
- @node Stopping
1975
- @section Stopping and Resuming Execution
1976
- One important use of a debugger is to stop your program @emph{before} it
1977
- terminates, so that if your script runs into trouble you can investigate and
1978
- find out why. However should your script accidentally continue to termination,
1979
- it can be arranged for @code{byebug} to not to leave byebug without your
1980
- explicit instruction. That way, you can restart the program using the same
1981
- command arguments.
1982
-
1983
- Inside @code{byebug}, your script may stop for any of several reasons, such as a
1984
- signal, a breakpoint, or reaching a new line after a @code{byebug} command such
1985
- as @code{step}. You may then examine and change variables, set new breakpoints
1986
- or remove old ones, and then continue execution.
1987
-
1988
- @menu
1989
- * Breakpoints:: Breakpoints (break, catch, delete)
1990
- * Disabling:: Disabling breakpoints (disable, enable)
1991
- * Conditions:: Break conditions (condition)
1992
- * Resuming Execution:: Resuming execution (continue, step, next, finish)
1993
- @end menu
1994
-
1995
- @node Breakpoints
1996
- @subsection Breakpoints (@samp{break}, @samp{catch}, @samp{delete})
1997
-
1998
- @cindex breakpoints
1999
- A @dfn{breakpoint} makes your script stop whenever a certain point in the
2000
- program is reached. For each breakpoint, you can add conditions to control in
2001
- finer detail whether your script stops. You specify the place where your script
2002
- should stop with the @code{break} command and its variants.
2003
-
2004
- @cindex breakpoint numbers
2005
- @cindex numbers for breakpoints
2006
- @code{byebug} assigns a number to each breakpoint when you create it; these
2007
- numbers are successive integers starting with one. In many of the commands for
2008
- controlling various features of breakpoints you use the breakpoint number to say
2009
- which breakpoint you want to change. Each breakpoint may be @dfn{enabled} or
2010
- @dfn{disabled}; if disabled, it has no effect on your script until you enable it
2011
- again.
2012
-
2013
-
2014
- @table @code
2015
- @kindex break @ovar{location}
2016
- @kindex b @r{(@code{break})}
2017
- @item break
2018
- Set a breakpoint at the current line.
2019
-
2020
- @item break @var{linenum}
2021
- Set a breakpoint at line @var{linenum} in the current source file. The current
2022
- source file is the last file whose source text was printed. The breakpoint will
2023
- stop your script just before it executes any of the code on that line.
2024
-
2025
- @item break @var{filename}:@var{linenum}
2026
- Set a breakpoint at line @var{linenum} in source file @var{filename}.
2027
-
2028
- What may be a little tricky when specifying the filename is getting the name
2029
- recognized by @code{byebug}. If you get a message the message ``@code{No source
2030
- file named ...}'', then you may need to qualify the name more fully. To see what
2031
- files are loaded you can use the @code{info files} or @code{info file} commands.
2032
- If you want the name @code{byebug} thinks of as the current file, use
2033
- @code{info line}.
2034
-
2035
- Here's an example:
2036
- @example
2037
- $ @b{byebug ~/ruby/gcd.rb 3 5}
2038
- /home/rocky/ruby/gcd.rb:4 # Note this is the file name
2039
- def gcd(a, b)
2040
- (byebug:1) @b{break gcd.rb:6}
2041
- *** No source file named gcd.rb
2042
- (byebug:1) @b{info line}
2043
- Line 4 of "/home/rocky/ruby/gcd.rb"
2044
- (byebug:1) @b{break /home/rocky/ruby/gcd.rb:6}
2045
- Breakpoint 1 file /home/rocky/ruby/gcd.rb, line 6
2046
- (byebug:1) @b{break ~/ruby/gcd.rb:10} # tilde expansion also works
2047
- Breakpoint 2 file /home/rocky/ruby/gcd.rb, line 10
2048
- (byebug:1) @b{info file gcd.rb}
2049
- File gcd.rb is not cached
2050
- (byebug:1) @b{info file /home/rocky/ruby/gcd.rb}
2051
- File /home/rocky/ruby/gcd.rb
2052
- 19 lines
2053
- @end example
2054
-
2055
- @item break @var{class}:@var{method}
2056
- Set a breakpoint in class @var{class} method @var{method}. You can also use a
2057
- period @code{.} instead of a colon @code{:}. Note that two colons @code{::} are
2058
- not used. Also note a class @emph{must} be specified here. If the method you
2059
- want to stop in is in the main class (i.e. the class that @code{self} belongs to
2060
- at the start of the program), then use the name @code{Object}.
2061
-
2062
- @kindex catch @ovar{exception} @r{[} on | 1 | off | 0 @r{]}
2063
- @kindex cat @r{(@code{catch})}
2064
- @item catch @ovar{exception} @r{[} on | 1 | off | 0 @r{]}
2065
- Set catchpoint to an exception. Without an exception name show catchpoints.
2066
-
2067
- With an ``on'' or ``off'' parameter, turn handling the exception on or off. To
2068
- delete all exceptions type ``catch off''.
2069
-
2070
- @cindex delete breakpoints
2071
- @kindex delete @ovar{breakpoints}
2072
- @kindex del @r{(@code{delete})}
2073
- @item delete @ovar{breakpoints}
2074
- Delete the breakpoints specified as arguments.
2075
-
2076
- If no argument is specified, delete all breakpoints (@code{byebug} asks for
2077
- confirmation. You can abbreviate this command as @code{del}).
2078
- @kindex info breakpoints
2079
- @cindex @code{$_} and @code{info breakpoints}
2080
- @item info breakpoints @ovar{n}
2081
- @itemx info break @ovar{n}
2082
- Print a table of all breakpoints set and not deleted, with the following columns
2083
- for each breakpoint:
2084
-
2085
- @table @emph
2086
- @item Breakpoint Numbers (@samp{Num})
2087
- @item Enabled or Disabled (@samp{Enb})
2088
- Enabled breakpoints are marked with @samp{1}. @samp{0} marks breakpoints that
2089
- are disabled (not enabled).
2090
- @item File and Line (@samp{file:line})
2091
- The filename and line number inside that file where of breakpoint in the script.
2092
- The file and line are separated with a colon.
2093
- @item Condition
2094
- A condition (an arithmetic expression) which when true causes the breakpoint to
2095
- take effect.
2096
- @end table
2097
- @noindent
2098
- If a breakpoint is conditional, @code{info break} shows the condition on the
2099
- line following the affected breakpoint; breakpoint commands, if any, are listed
2100
- after that.
2101
-
2102
- @code{info break} with a breakpoint number @var{n} as argument lists only that
2103
- breakpoint.
2104
-
2105
- Examples:
2106
- @example
2107
- (byebug:1) @b{info break}
2108
- Breakpoints at following places:
2109
- Num Enb What
2110
- 1 y gcd.rb:3
2111
- 2 y gcb.rb:28 if n > 1
2112
- (byebug:1) @b{info break 2}
2113
- 2 y gcb.rb:28 if n > 1
2114
- @end example
2115
- @end table
2116
-
2117
- @node Disabling
2118
- @subsection Disabling breakpoints (@samp{disable}, @samp{enable})
2119
-
2120
- Rather than deleting a breakpoint, you might prefer to @dfn{disable} it. This
2121
- makes the breakpoint inoperative as if it had been deleted, but remembers the
2122
- information on the breakpoint so that you can @dfn{enable} it again later.
2123
-
2124
- You disable and enable breakpoints and catchpoints with the @code{enable} and
2125
- @code{disable} commands, optionally specifying one or more breakpoint numbers as
2126
- arguments. Use @code{info break} to print a list of breakpoints and catchpoints
2127
- if you do not know which numbers to use.
2128
-
2129
- A breakpoint or catchpoint can have any different states of enablement:
2130
-
2131
- @itemize @bullet
2132
- @item
2133
- Enabled. The breakpoint stops your program. A breakpoint set
2134
- with the @code{break} command starts out in this state.
2135
- @item
2136
- Disabled. The breakpoint has no effect on your program.
2137
- @end itemize
2138
-
2139
- You can use the following commands to enable or disable breakpoints and
2140
- catchpoints:
2141
-
2142
- @table @code
2143
- @kindex disable breakpoints
2144
- @item disable @var{breakpoints}
2145
- Disable the specified breakpoints or all breakpoints, if none are listed. A
2146
- disabled breakpoint has no effect but it is not forgotten. All options such as
2147
- ignore-counts, conditions and commands are remembered in case the breakpoint is
2148
- enabled again later. You may abbreviate @code{disable} as @code{dis}.
2149
-
2150
- @kindex enable breakpoints
2151
- @item enable @var{breakpoints}
2152
- Enable the specified breakpoints (or all defined breakpoints). They become
2153
- effective once again in stopping your program.
2154
- @end table
2155
-
2156
- Breakpoints that you set are initially enabled; subsequently, they become
2157
- disabled or enabled only when you use one of the commands above. (The command
2158
- @code{until} can set and delete a breakpoint of its own, but it does not change
2159
- the state of your other breakpoints; see @ref{Resuming Execution}.)
2160
-
2161
- @node Conditions
2162
- @subsection Break conditions (@samp{condition})
2163
- @cindex conditional breakpoints
2164
- @cindex breakpoint conditions
2165
-
2166
- The simplest sort of breakpoint breaks every time your script reaches a
2167
- specified place. You can also specify a @dfn{condition} for a breakpoint. A
2168
- condition is just a Ruby expression.
2169
-
2170
- Break conditions can be specified when a breakpoint is set, by using @samp{if}
2171
- in the arguments to the @code{break} command. A breakpoint with a condition
2172
- evaluates the expression each time your script reaches it, and your script stops
2173
- only if the condition is @emph{true}. They can also be changed at any time with
2174
- the @code{condition} command.
2175
-
2176
- @ifset FINISHED
2177
- You can also use the @code{if} keyword with the @code{watch} command. The
2178
- @code{catch} command does not recognize the @code{if} keyword; @code{condition}
2179
- is the only way to impose a further condition on a catchpoint.
2180
- @end ifset
2181
-
2182
- @table @code
2183
- @kindex condition
2184
- @item condition @var{bnum} @var{expression}
2185
- Specify @var{expression} as the break condition for breakpoint @var{bnum}. After
2186
- you set a condition, breakpoint @var{bnum} stops your program only if the value
2187
- of @var{expression} is true (nonzero).
2188
-
2189
- @item condition @var{bnum}
2190
- Remove the condition from breakpoint number @var{bnum}. It becomes an ordinary
2191
- unconditional breakpoint.
2192
- @end table
2193
-
2194
- @ifset FINISHED
2195
- When you use @code{condition}, @code{byebug} checks @var{expression} immediately
2196
- for syntactic correctness, and to determine whether symbols in it have referents
2197
- in the context of your breakpoint. If @var{expression} uses symbols not
2198
- referenced in the context of the breakpoint, @code{byebug} prints an error
2199
- message:
2200
-
2201
- @example
2202
- No symbol "foo" in current context.
2203
- @end example
2204
- @end ifset
2205
-
2206
- @noindent
2207
- The debugger does not actually evaluate @var{expression} at the time the
2208
- @code{condition} command (or a command that sets a breakpoint with a condition,
2209
- like @code{break if @dots{}}) is given, however.
2210
-
2211
- Examples;
2212
- @example
2213
- condition 1 x>5 # Stop on breakpoint 0 only if x>5 is true.
2214
- condition 1 # Change that! Unconditionally stop on breakpoint 1.
2215
- @end example
2216
-
2217
- @node Resuming Execution
2218
- @subsection Resuming Execution (@samp{step}, @samp{next}, @samp{finish}, @samp{continue})
2219
-
2220
- A typical technique for using stepping is to set a breakpoint
2221
- (@pxref{Breakpoints}) at the beginning of the function or the section of your
2222
- script where a problem is believed to lie, run your script until it stops at
2223
- that breakpoint, and then step through the suspect area, examining the variables
2224
- that are interesting, until you see the problem happen.
2225
-
2226
- @cindex stepping
2227
- @cindex continuing
2228
- @cindex resuming execution
2229
- @dfn{Continuing} means resuming program execution until your script completes
2230
- normally. In contrast, @dfn{stepping} means executing just one more ``step'' of
2231
- your script, where ``step'' may mean one line of source code. Either when
2232
- continuing or when stepping, your script may stop even sooner, due to a
2233
- breakpoint or a signal.
2234
-
2235
- @menu
2236
- * Step:: running the next statement (step)
2237
- * Next:: running the next statement skipping over functions (next)
2238
- * Finish:: running until the return of a function or ``source'' (finish)
2239
- * Continue:: continuing execution (continue)
2240
- @end menu
2241
-
2242
- @node Step
2243
- @subsubsection Step (@samp{step})
2244
-
2245
- @table @code
2246
- @kindex step @r{[}+@r{]} @ovar{count}
2247
- @kindex s @r{(@code{step})}
2248
- @item step @r{[}+-@r{]} @ovar{count}
2249
- Continue running your program until the next logical stopping point and return
2250
- control to @code{byebug}. This command is abbreviated @code{s}.
2251
-
2252
- Just like int the programming language Lisp, Ruby tends to be implemented in a
2253
- highly expression-oriented manner. Therefore things that in other languages may
2254
- appear to be a single statement are implemented in Ruby as several expressions.
2255
- For example, in an ``if'' statement or loop statement a stop is made after the
2256
- expression is evaluated but before the test on the expression is made.
2257
-
2258
- So it is common that some lines in the program will have several stopping points
2259
- whereas in other debuggers of other languages there would be only one. Or you
2260
- may have several statements listed on a single line.
2261
-
2262
- When stepping it is not uncommon to want to go to a different line on each step.
2263
- If you want to make sure that on a step you go to a @emph{different} position,
2264
- add a plus sign (@samp{+}).
2265
-
2266
- @emph{Note: step+ with a number count is not the same as issuing count step+
2267
- commands. Instead it uses count-1 step commands followed by a step+ command. For
2268
- example, @code{step+ 3} is the same as @code{step; step; step+}, not
2269
- @code{step+; step+; step+}}
2270
-
2271
- If you find yourself generally wanting to use @code{step+} rather than
2272
- @code{step}, you may want to consider using @code{set forcestep},
2273
- (@pxref{Forcestep}).
2274
-
2275
- If you have @code{forcestep} set on but want to temporarily disable it for the
2276
- next step command, append a minus, or @code{step-}.
2277
-
2278
- With a count, @code{step} will continue running as normal, but do so @var{count}
2279
- times. If a breakpoint is reached, or a signal not related to stepping occurs
2280
- before @var{count} steps, stepping stops right away.
2281
- @end table
2282
-
2283
- @node Next
2284
- @subsubsection Next (@samp{next})
2285
- @table @code
2286
- @kindex next @r{[}+-@r{]} @ovar{count}
2287
- @kindex n @r{(@code{next})}
2288
- @item next @r{[}+@r{]} @ovar{count}
2289
- This is similar to @code{step}, but function or method calls that appear within
2290
- the line of code are executed without stopping. As with step, if you want to
2291
- make sure that on a step you go to a @emph{different} position, add a plus sign
2292
- (@samp{+}). Similarly, appending a minus disables a @code{forcestep}
2293
- temporarily, and an argument @var{count} is a repeat count, as for @code{step}.
2294
- @end table
2295
-
2296
- @node Finish
2297
- @subsubsection Finish (@samp{finish})
2298
- @table @code
2299
- @kindex finish @ovar{frame-number}
2300
- @item finish @ovar{frame-number}
2301
- Execute until selected stack frame returns. If no frame number is given, we run
2302
- until the currently selected frame returns. The currently selected frame starts
2303
- out the most-recent frame or 0 if no frame positioning (e.g@: @code{up},
2304
- @code{down} or @code{frame}) has been performed. If a frame number is given we
2305
- run until @var{frame} frames returns.
2306
-
2307
- If you want instead to terminate the program and byebug entirely, use
2308
- @code{quit} (@pxref{Quitting byebug, ,Quitting byebug}).
2309
-
2310
- @end table
2311
-
2312
- @node Continue
2313
- @subsubsection Continue (@samp{continue})
2314
- @table @code
2315
- @kindex continue @ovar{line-specification}
2316
- @kindex c @r{(@code{continue})}
2317
- @item continue @ovar{line-specification}
2318
- @itemx c @ovar{line-specification}
2319
- Resume program execution, at the address where your script last
2320
- stopped; any breakpoints set at that address are bypassed.
2321
-
2322
- The optional argument @var{line-specification} allows you to specify a
2323
- line number to set a one-time breakpoint which is deleted when that
2324
- breakpoint is reached.
2325
-
2326
- Should the program stop before that breakpoint is reached, for
2327
- example, perhaps another breakpoint is reached first, in
2328
- a listing of the breakpoints you won't see this entry in the list of
2329
- breakpoints.
2330
- @end table
2331
-
2332
- @node byebug settings
2333
- @section byebug settings (@samp{set args}, @samp{set autoeval}..)
2334
-
2335
- You can alter the way byebug interacts with you using @code{set}
2336
- commands.
2337
-
2338
- The various parameters to @code{set} are given below. Each parameter
2339
- name needs to to be only enough to make it unique. For example
2340
- @code{set force} is a suitable abbreviation for @code{set forcestep}.
2341
- The letter case is not important, so @code{set FORCE} or @code{set
2342
- Force} are also suitable abbreviations.
2343
-
2344
- Many @code{set} commands are either ``on'' or ``off'', and you can
2345
- indicate which way you want set by supplying the corresponding
2346
- word. The number 1 can be used for ``on'' and 0 for ``off''. If none
2347
- of these is given, we will assume ``on''. A deprecated way of turning
2348
- something off is by prefacing it with ``no''.
2349
-
2350
- Each @code{set} command has a corresponding @code{show} command which
2351
- allows you to see the current value.
2352
-
2353
- @menu
2354
- * Args:: Annotation Level
2355
- * Autoeval:: Evaluate unrecognized commands
2356
- * Autolist:: Execute ``list'' command on every breakpoint
2357
- * Autoirb:: Invoke IRB on every stop
2358
- * Autoreload:: Reload source code when changed
2359
- * Basename:: Report file basename only showing file names
2360
- * Callstyle:: Show Report file basename only showing file names
2361
- * Forcestep:: Make sure 'next/step' commands always move to a new line
2362
- * Fullpath:: Display full file names in frames
2363
- * History:: Generic command for showing command history parameters.
2364
- * Keepframebindings:: Save frame binding on each call
2365
- * Linetrace:: line execution tracing
2366
- * Linetrace+:: line tracing style
2367
- * Listsize:: Number of lines to try to show in a 'list' command
2368
- * Post-mortem:: Whether post-mortem handling is in effect.
2369
- * Trace:: Display stack trace when 'eval' raises exception
2370
- * Width:: Number of characters byebug thinks are in a line
2371
- @end menu
2372
-
2373
- @node Args
2374
- @subsection Set/Show args
2375
-
2376
- @table @code
2377
- @kindex set args @ovar{parameters}
2378
- @item set args @ovar{parameters}
2379
- Specify the arguments to be used if your program is rerun. If
2380
- @code{set args} has no arguments, @code{restart} executes your program
2381
- with no arguments. Once you have run your program with arguments,
2382
- using @code{set args} before the next @code{restart} is the only way to run
2383
- it again without arguments.
2384
-
2385
- @kindex show args
2386
- @item show args
2387
- Show the arguments to give your program when it is started.
2388
- @end table
2389
-
2390
- @node Autoeval
2391
- @subsection Set/Show auto-eval
2392
-
2393
- @table @code
2394
- @kindex set autoeval @r{[} on | 1 | off | 0 @r{]}
2395
- @item set autoeval @r{[} on | 1 | off | 0 @r{]}
2396
- Specify that byebug input that isn't recognized as a command should
2397
- be passed to Ruby for evaluation (using the current debugged program
2398
- namespace). Note however that we @emph{first} check input to see if it
2399
- is a byebug command and @emph{only} if it is not do we consider it
2400
- as Ruby code. This means for example that if you have variable called
2401
- @code{n} and you want to see its value, you could use @code{p n},
2402
- because just entering @code{n} will be interpreted as byebug
2403
- ``next'' command.
2404
-
2405
- See also @ref{irb} and @ref{Autoirb}.
2406
-
2407
- When autoeval is set on, you'll get a different error message when you
2408
- invalid commands are encountered. Here's a session fragment to show
2409
- the difference
2410
- @smallexample
2411
- (byebug:1) @b{stepp}
2412
- Unknown command
2413
- (byebug:1) @b{set autoeval on}
2414
- autoeval is on.
2415
- (byebug:1) @b{stepp}
2416
- NameError Exception: undefined local variable or method `stepp' for ...
2417
- @end smallexample
2418
-
2419
- @kindex show autoeval
2420
- @item show args
2421
- Shows whether Ruby evaluation of byebug input should occur or not.
2422
- @end table
2423
-
2424
- @node Autolist
2425
- @subsection Execute ``list'' command on every breakpoint
2426
-
2427
- @node Autoirb
2428
- @subsection Set/Show auto-irb
2429
-
2430
- @table @code
2431
- @kindex set autoirb @r{[} on | 1 | off | 0 @r{]}
2432
- @item set autoirb @r{[} on | 1 | off | 0 @r{]}
2433
-
2434
- When your program stops, normally you go into a byebug command loop
2435
- looking for byebug commands. If instead you would like to directly
2436
- go into an irb shell, set this on. See also @ref{Autoeval} or
2437
- @ref{irb} if you tend to use byebug commands but still want Ruby
2438
- evaluation occasionally.
2439
-
2440
- @kindex show autoirb
2441
- @item show autoirb
2442
- Shows whether byebug will go into irb on stop or not.
2443
- @end table
2444
-
2445
- @node Autoreload
2446
- @subsection Set/Show auto-reload
2447
- @table @code
2448
- @kindex set autoreload @r{[} on | 1 | off | 0 @r{]}
2449
- Set this on if byebug should check to see if the source has
2450
- changed since the last time it reread in the file if it has.
2451
- @end table
2452
-
2453
- @node Basename
2454
- @subsection Set/Show basename
2455
-
2456
- @table @code
2457
- @kindex set basename @r{[} on | 1 | off | 0 @r{]}
2458
- @item set basename @r{[} on | 1 | off | 0 @r{]}
2459
- Source filenames are shown as the shorter ``basename''
2460
- only. (Directory paths are omitted). This is useful in running the
2461
- regression tests and may useful in showing byebug examples as in
2462
- this text. You may also just want less verbose filename display.
2463
-
2464
- By default filenames are shown as with their full path.
2465
-
2466
- @kindex show basename
2467
- @item show basename
2468
- Shows the whether filename display shows just the file basename or not.
2469
- @end table
2470
-
2471
- @node Callstyle
2472
- @subsection Set/Show call style
2473
-
2474
- @table @code
2475
- @ifset FINISHED
2476
- @kindex set callstyle @r{[} short | long @r{]}
2477
- @item set callstyle @r{[} short | long @r{]}
2478
- @else
2479
- @kindex set callstyle @r{[} short | long
2480
- @item set callstyle @r{[} short | long
2481
- @end ifset
2482
-
2483
- Sets how you want call parameters displayed
2484
-
2485
- @code{short} shows current method and parameter names.
2486
- @code{long} shows current class, current method, parameter names and the class
2487
- of each parameter as it currently exist. Note the type could have changed
2488
- since the call was made.
2489
- @end table
2490
-
2491
- @node Forcestep
2492
- @subsection Set/Show Forces Different Line Step/Next
2493
-
2494
- @table @code
2495
- @kindex set forcestep @r{[} on | 1 | off | 0 @r{]}
2496
- @item set forcestep @r{[} on | 1 | off | 0 @r{]}
2497
-
2498
- Due to the interpretive, expression-oriented nature of the Ruby
2499
- Language and implementation, each line often contains many possible
2500
- stopping points, while in a byebug it is often desired to treat each
2501
- line as an individual stepping unit.
2502
-
2503
- Setting forcestep on will cause each @code{step} or @code{next}
2504
- command to stop at a different line number. See also @ref{Step} and
2505
- @ref{Next}.
2506
-
2507
- @kindex show forcestep
2508
- @item show forcestep
2509
- Shows whether forcestep is in effect or not.
2510
- @end table
2511
-
2512
- @node Fullpath
2513
- @subsection Set/Show Frame full path
2514
-
2515
- @node History
2516
- @subsection Command History Parameters
2517
- @table @code
2518
- @item show commands
2519
- @kindex show commands
2520
- Display the last ten commands in the command history.
2521
-
2522
- @item show commands @var{n}
2523
- @kindex show commands @var{n}
2524
- Print ten commands centered on command number @var{n}.
2525
-
2526
- @item show history filename
2527
- @kindex show history filename
2528
- Show the filename in which to record the command history
2529
- (the list of previous commands of which a record is kept).
2530
-
2531
- @item set history save @r{[} on | 1 | off | 0 @r{]}
2532
- @kindex set history save @r{[} on | 1 | off | 0 @r{]}
2533
- Set whether to save the history on exit.
2534
-
2535
- @item show history save
2536
- @kindex show history save
2537
- Show saving of the history record on exit.
2538
-
2539
- @item set history size @var{number}
2540
- @kindex set history size @var{number}
2541
- Set the maximum number of commands to save in the history.
2542
-
2543
- @item show history size
2544
- @kindex show history size
2545
- Show the size of the command history, i.e. the number of previous
2546
- commands to keep a record of.
2547
- @end table
2548
-
2549
- @node Keepframebindings
2550
- @subsection Save frame binding on each call
2551
-
2552
- @node Linetrace
2553
- @subsection Set/Show Line tracing
2554
-
2555
- @table @code
2556
- @kindex set linetrace @r{[} on | 1 | off | 0 @r{]}
2557
- @item set linetrace @r{[} on | 1 | off | 0 @r{]}
2558
-
2559
- Setting linetrace on will cause lines to be shown before run.
2560
-
2561
- @kindex show linetrace
2562
- @item show linetrace
2563
- Shows whether line tracing is in effect or not.
2564
- @end table
2565
-
2566
- @node Linetrace+
2567
- @subsection Set/Show Line tracing style
2568
-
2569
- @table @code
2570
- @kindex set linetrace_plus @r{[} on | 1 | off | 0 @r{]}
2571
- @item set linetrace_plus @r{[} on | 1 | off | 0 @r{]}
2572
-
2573
- Setting linetrace_plus on will cause every trace line to be printed, even if
2574
- it's a duplicate of the preceding trace line. Note however that this setting
2575
- doesn't by itself turn on or off line tracing.
2576
-
2577
- @kindex show linetrace_plus
2578
- @item show linetrace_plus
2579
- Shows whether the line tracing style is to show all lines or remove duplicates
2580
- linetrace lines when it is a repeat of the previous line.
2581
- @end table
2582
-
2583
- @node Listsize
2584
- @subsection Set/Show lines in a List command
2585
-
2586
- @table @code
2587
- @kindex set listsize @var{number-of-lines}
2588
- @item set listsize @var{number-of-lines}
2589
- Set number of lines to try to show in a @code{list} command.
2590
- @kindex show listsize
2591
- @item show listsize
2592
- Shows the list-size setting.
2593
- @end table
2594
-
2595
- @node Post-mortem
2596
- @subsection Show Post-mortem handling
2597
- @table @code
2598
- @kindex show post-mortem
2599
- Shows wither post-mortem debugging is in effect. Right now we don't have the
2600
- ability to change that state inside byebug.
2601
- @end table
2602
-
2603
- @node Trace
2604
- @subsection Display stack trace when 'eval' raises exception
2605
-
2606
- @node Width
2607
- @subsection Set/Show Line width
2608
-
2609
- @table @code
2610
- @kindex set width @var{column-width}
2611
- @item set width @var{column-width}
2612
- Set number of characters per line of byebug output. By default it is the number
2613
- of columns in the current terminal.
2614
- @kindex show width
2615
- @item show width
2616
- Shows the current width setting.
2617
- @end table
2618
-
2619
- @node Program Information
2620
- @section Program Information (@samp{info})
2621
-
2622
- This @code{info} command (abbreviated @code{i}) is for describing the state of
2623
- your program. For example, you can list the current parameters with
2624
- @code{info args} or list the breakpoints you have set with
2625
- @code{info breakpoints} or @code{info watchpoints}. You can get a complete list
2626
- of @code{info} sub-commands with @w{@code{help info}}.
2627
-
2628
- @table @code
2629
- @kindex info args
2630
- @item info args
2631
- Method arguments of the current stack frame.
2632
-
2633
- @kindex info breakpoints
2634
- @item info breakpoints
2635
- Status of user-settable breakpoints
2636
-
2637
- @kindex info display
2638
- @item info display
2639
- All display expressions.
2640
-
2641
- @kindex info files
2642
- @item info files
2643
- Source files in the program.
2644
-
2645
- @kindex info file
2646
- @item info file @var{filename} @ovar{all|basic|path|lines|mtime|sha1}
2647
- Information about a specific file. Parameter @code{path} gives the full path
2648
- name of the file. Parameter @code{lines} gives the number of lines in the file,
2649
- @code{mtime} shows the modification time of the file (if available), @code{sha1}
2650
- computes a SHA1 hash of the data in the file. @code{all} gives all of the above
2651
- information and @code{basic} is equivalent to @code{path} and @code{lines}.
2652
-
2653
- @kindex info line
2654
- @item info line
2655
- Line number and file name of current position in source.
2656
-
2657
- @kindex info locals
2658
- @item info locals
2659
- Local variables of the current stack frame.
2660
-
2661
- @kindex info program
2662
- @item info program
2663
- Display information about the status of your program: whether it is running or
2664
- not and why it stopped. If an unhandled exception occurred, the exception class
2665
- and @code{to_s} method is called.
2666
-
2667
- @kindex info stack
2668
- @item info stack
2669
- Backtrace of the stack. An alias for @code{where}. @xref{Backtrace}.
2670
-
2671
- @kindex info variables
2672
- @item info variables
2673
- Local and instance variables.
2674
- @end table
2675
-
2676
- @node Post-Mortem Debugging
2677
- @chapter Post-Mortem Debugging
2678
- @cindex post-mortem debugging
2679
-
2680
- It is also to possible enter byebug when you have an uncaught exception that is
2681
- about to terminate our program. This is called @emph{post-mortem debugging}. In
2682
- this state many byebug commands for examining variables and moving around the
2683
- stack still work. However some commands, such as those implying a continuation
2684
- of running code, no longer work.
2685
-
2686
- The most reliable way to set up post-mortem debugging is to use the
2687
- @option{--post-mortem} option in invoking @code{byebug}. See @ref{byebug
2688
- command-line options}. This traps/wraps at byebug ``load'' of your Ruby script.
2689
- When this is done, your program is stopped after the exception takes place, but
2690
- before the stack has been unraveled. (Alas, it would be nice to if one could
2691
- allow resetting the exception and continuing...)
2692
-
2693
- If however you haven't invoked @code{byebug} at the outset, but instead call
2694
- @code{byebug} from inside your program, to set up post-mortem debugging set the
2695
- @code{post_mortem} key in @code{Byebug.start}. Here's an example:
2696
-
2697
- @smallexample
2698
- $ @b{cat t.rb }
2699
- require 'rubygems'
2700
- require 'byebug' ; Byebug.start(post_mortem: true)
2701
-
2702
- def t1
2703
- raise 'test'
2704
- end
2705
- def t2
2706
- t1
2707
- end
2708
- t2
2709
-
2710
- $ @b{ruby t.rb }
2711
- t.rb:8: raise 'test'
2712
- (byebug:post-mortem) @b{l=}
2713
- [3, 12] in t.rb
2714
- 3
2715
- 4 Byebug.start
2716
- 5 Byebug.post_mortem
2717
- 6
2718
- 7 def t1
2719
- => 8 raise 'test'
2720
- 9 end
2721
- 10 def t2
2722
- 11 t1
2723
- 12 end
2724
- (byebug:post-mortem)
2725
- @end smallexample
2726
-
2727
- Alternatively you can call @code{Byebug.post_mortem()} after byebug has
2728
- been started. The @code{post_mortem()} method can be called in two
2729
- ways. Called without a block, it installs a global @code{at_exit()} hook
2730
- that intercepts exceptions not handled by your Ruby script. In
2731
- contrast to using the @option{--post-mortem} option, when this hook
2732
- occurs after the call stack has been rolled back. (I'm not sure if
2733
- this in fact makes any difference operationally; I'm just stating it
2734
- because that's how it works.)
2735
-
2736
- If you know that a particular block of code raises an exception you
2737
- can enable post-mortem mode by wrapping this block inside a
2738
- @code{Byebug.post_mortem} block
2739
-
2740
- @smallexample
2741
- def offender
2742
- 1/0
2743
- end
2744
- ...
2745
- require "ruby-gems"
2746
- require "byebug"
2747
- Byebug.post_mortem do
2748
- ...
2749
- offender
2750
- ...
2751
- end
2752
- @end smallexample
2753
-
2754
- Once inside byebug in post-mortem debugging, the prompt should
2755
- be @code{(byebug:post-mortem)}.
2756
-
2757
- @node Byebug Module and Class
2758
- @chapter The Byebug Module and Class
2759
-
2760
- @menu
2761
- * Byebug Module:: byebug's Byebug module
2762
- * Byebug Class:: Byebug class
2763
- * Kernel routines:: Routines added to Kernel
2764
- @end menu
2765
-
2766
- @node Byebug Module
2767
- @section The Byebug Module
2768
-
2769
- @menu
2770
- * Byebug.run::
2771
- @ifset LATER
2772
- * Byebug.post-mortem::
2773
- @end ifset
2774
- * Byebug.context::
2775
- * Byebug.settings::
2776
- @end menu
2777
-
2778
- @node Byebug.run
2779
- @subsection @code{Byebug.start}, @code{Byebug.started?}, @code{Byebug.stop}, @code{Byebug.run_script}
2780
-
2781
- In order to provide better debugging information regarding the stack frame(s),
2782
- byebug has to intercept each call, save some information and on return remove
2783
- it. Therefore one has to issue a call to indicate byebug to start saving
2784
- information and another call to stop. Of course, if you call byebug from the
2785
- outset via @code{byebug} this is done for you.
2786
-
2787
- @table @code
2788
- @item Byebug.start(@ovar{options}) @ovar{block}
2789
- @vindex @code{Byebug.start(options)}
2790
- @vindex @code{Byebug.start(block)}
2791
- Turn on add additional instrumentation code to facilitate debugging. A
2792
- system even table hook is installed and some variables are set up.
2793
-
2794
- This needs to be done before entering byebug; therefore a call
2795
- to byebug issue a @code{Byebug.start} call if necessary.
2796
-
2797
- If called without a block, @code{Byebug.start} returns @code{true} if
2798
- byebug was already started. But if you want to know if the
2799
- byebug has already been started @code{Byebug.started?} can tell
2800
- you.
2801
-
2802
- If a block is given, byebug is started and @code{yields} to
2803
- block. When the block is finished executing, byebug stopped with
2804
- the @code{Byebug.stop method}. You will probably want to put a call
2805
- to @code{byebug} somwhere inside that block
2806
-
2807
- But if you want to completely stop byebug, you must call
2808
- @code{Byebug.stop} as many times as you called Byebug.start
2809
- method.
2810
-
2811
- The first time Byebug.start is called there is also some additional
2812
- setup to make the @code{restart} command work. In particular, @code{$0} and
2813
- @code{ARGV} are used to set internal byebug variables.
2814
-
2815
- Therefore you should make try to make sure that when
2816
- @code{Byebug.start} is called neither of these variables has been
2817
- modified. If instead you don't want this behavior you can pass an
2818
- options has and set the @code{:init} key to @code{false}. That is
2819
- @smallexample
2820
- Byebug.start(:init => false) # or Byebug.start(@{:init => false@})
2821
- @end smallexample
2822
-
2823
- If you want post-mortem debugging, you can also supply
2824
- @code{:post_mortem => true} in @code{Byebug.start}.
2825
-
2826
- @item Byebug.started?
2827
- @vindex @code{Byebug.started?}
2828
- Boolean. Return @code{true} if byebug has been started.
2829
-
2830
- @item Byebug.stop
2831
- @vindex @code{Byebug.stop}
2832
- Turn off instrumentation to allow debugging. Return @code{true} is returned
2833
- if byebug is disabled, otherwise it returns @code{false}.
2834
- @emph{Note that if you want to stop byebug, you must call Byebug.stop
2835
- as many times as you called the @code{Byebug.start} method.}
2836
-
2837
- @item Byebug.run_script(@var{byebug-command-file}, out = handler.interface)
2838
- @vindex @code{Byebug.run_script}
2839
- Reads/runs the given file containing byebug commands. @code{.byebugrc} is run this way.
2840
-
2841
- @item Byebug.last_exception
2842
- @vindex @code{Byebug.last_exception}
2843
- If not @code{nil}, this contains @code{$!} from the last exception.
2844
-
2845
- @end table
2846
-
2847
- @node Byebug.context
2848
- @subsection @code{Byebug.context}
2849
- As mentioned previously, @code{Byebug.start} instruments additional
2850
- information to be obtained about the current block/frame stack. Here
2851
- we describe these additional @code{Byebug.context} methods.
2852
-
2853
- Were a frame position is indicated, it is optional. The top or current frame
2854
- position (position zero) is used if none is given.
2855
-
2856
- @table @code
2857
- @item Byebug.context.frame_args @ovar{frame-position=0}
2858
- @vindex @code{Byebug.context.frame_args}
2859
- If track_frame_args? is true, return information saved about call
2860
- arguments (if any saved) for the given frame position.
2861
-
2862
- @item Byebug.context.frame_args_info @ovar{frame-position=0}
2863
- @vindex @code{Byebug.context.frame_args_info}
2864
-
2865
- @item Byebug.context.frame_class @ovar{frame-position=0}
2866
- @vindex @code{Byebug.context.frame_args_info}
2867
- Return the class of the current frame stack.
2868
-
2869
- @item Byebug.context.frame_file @ovar{frame-position=0}
2870
- @vindex @code{Byebug.context.frame_file}
2871
- Return the filename of the location of the indicated frame position.
2872
-
2873
- @item Byebug.context.frame_id @ovar{frame-position=0}
2874
- @vindex @code{Byebug.context.frame_id}
2875
- Same as @code{Byebug.context.method}.
2876
-
2877
- @item Byebug.context.frame_line @ovar{frame-position=0}
2878
- @vindex @code{Byebug.context.frame_line}
2879
- Return the filename of the location of the indicated frame position.
2880
-
2881
- @item Byebug.context.frame_method @ovar{frame-position=0}
2882
- @vindex @code{Byebug.context.frame_method}
2883
- Symbol of the method name of the indicated frame position.
2884
-
2885
- @item Byebug.context.calced_stack_size
2886
- @vindex @code{Byebug.context.calced_stack_size}
2887
- Returns the stack size calculated by byebug. This is initialized when byebug is
2888
- started and after that is kept up-to-date using the TracePoint API events.
2889
- @end table
2890
-
2891
- @node Byebug.settings
2892
- @subsection @code{Byebug.settings}
2893
- @vindex @code{Byebug.settings}
2894
- Symbols listed here are keys into the Array @code{Byebug.settings}.
2895
- These can be set any time after the @code{byebug} is loaded. For example:
2896
- @smallexample
2897
- require "byebug/byebug"
2898
- Byebug.settings[:autoeval] = true # try eval on unknown byebug commands
2899
- Byebug.listsize = 20 # Show 20 lines in a list command
2900
- @end smallexample
2901
-
2902
- @table @code
2903
- @item :argv
2904
- Array of String. @code{argv[0]} is the debugged program name and
2905
- @code{argv[1..-1]} are the command arguments to it.
2906
- @item :autoeval
2907
- Boolean. True if auto autoeval on. @xref{Autoeval}.
2908
- @item :autoirb
2909
- Fixnum: 1 if on or 0 if off. @xref{Autoirb}.
2910
- @item :autolist
2911
- Fixnum: 1 if on or 0 if off.
2912
- @item :basename
2913
- Boolean. True if basename on. @xref{Basename}.
2914
- @item :callstyle
2915
- Symbol: @code{:short} or @code{:long}. @xref{Callstyle}.
2916
- @item :testing
2917
- Boolean. True if currently testing byebug.
2918
- @item :forcestep
2919
- Boolean. True if stepping should go to a line different from the last
2920
- step. @xref{Forcestep}.
2921
- @item :fullpath
2922
- Boolean. @xref{Fullpath}.
2923
- @item :listsize
2924
- Fixnum. Number of lines to show in a @code{list} command. @xref{Listsize}.
2925
- @item :autoreload
2926
- Boolean. True if we should reread the source every time it changes. @xref{Autoreload}.
2927
- @item :stack_on_error
2928
- Boolean. True if we should produce a stack trace on eval errors. @xref{Trace}.
2929
- @item :width
2930
- Fixnum. Number of characters byebug thinks are in a line. @xref{Width}.
2931
- @end table
2932
-
2933
- @node Byebug Class
2934
- @section The @code{Byebug} Class
2935
- @menu
2936
- * Byebug.Breakpoint:: Byebug::Breakpoint
2937
- * Byebug.Context:: Byebug::Context
2938
- * Byebug.Command:: Byebug::Command
2939
- @end menu
2940
-
2941
- @table @code
2942
- @item add_breakpoint(file, line, expr)
2943
- @vindex @code{Byebug.add_breakpoint}
2944
- Adds a breakpoint in file @var{file}, at line @var{line}. If @var{expr} is not
2945
- nil, it is evaluated and a breakpoint takes effect at the indicated position
2946
- when that expression is true. You should verify that @var{expr} is syntactically
2947
- valid or a @code{SyntaxError} exception, and unless your code handles this the
2948
- debugged program may terminate.
2949
-
2950
- @item remove_breakpoint(bpnum)
2951
- @vindex @code{Byebug.remove_breakpoint}
2952
- When a breakpoint is added, it is assigned a number as a way to uniquely
2953
- identify it. (There can be more than one breakpoint on a given line.) To remove
2954
- a breakpoint, use @code{remove_breakpoint} with breakpoint number @var{bpnum}.
2955
-
2956
- @item breakpoints
2957
- @vindex @code{Byebug.breakpoints}
2958
- Return a list of the breakpoints that have been added but not removed.
2959
- @end table
2960
-
2961
- @node Byebug.Breakpoint
2962
- @subsection The @code{Byebug::Breakpoint} Class
2963
- Breakpoints are objects in the @code{Byebug::Breakpoint} class.
2964
- @table @code
2965
- @item enabled?
2966
- @vindex @code{Byebug::Breakpoints.enabled?}
2967
- Returns whether breakpoint is enabled or not.
2968
-
2969
- @item enabled=
2970
- @vindex @code{Byebug::Breakpoints.enabled=}
2971
- Sets a breakpoint as enabled or not.
2972
-
2973
- @item expr
2974
- @vindex @code{Byebug::Breakpoints.expr}
2975
- Returns an expression which has to be true at the point where the breakpoint is
2976
- set before we stop.
2977
-
2978
- @item expr=
2979
- @vindex @code{Byebug::Breakpoints.expr=}
2980
- Sets an expression which has to be true at the point where the breakpoint is set
2981
- before we stop.
2982
-
2983
- @item hit_condition
2984
- @item hit_condition=
2985
- @vindex @code{Byebug::Breakpoints.condition}
2986
- @vindex @code{Byebug::Breakpoints.condition=}
2987
-
2988
- @item hit_count
2989
- @vindex @code{Byebug::Breakpoints.hit_count}
2990
- Returns the hit count of the breakpoint.
2991
-
2992
- @item hit_value
2993
- @vindex @code{Byebug::Breakpoints.hit_value}
2994
- Returns the hit value of the breakpoint.
2995
-
2996
- @item hit_value=
2997
- @vindex @code{Byebug::Breakpoints.hit_value=}
2998
- Sets the hit value of the breakpoint.
2999
-
3000
- @item id
3001
- @cindex @code{Byebug::Breakpoints.id}
3002
- A numeric name for the breakpoint which is used in listing breakpoints and
3003
- removing, enabling or disabling the breakpoint.
3004
-
3005
- @item pos
3006
- @vindex @code{Byebug::Breakpoints.pos=}
3007
- Returns the line number of this breakpoint.
3008
- @item pos=
3009
- @vindex @code{Byebug::Breakpoints.pos=}
3010
- Sets the line number of this breakpoint.
3011
-
3012
- @item source
3013
- @vindex @code{Byebug::Breakpoints.source}
3014
- Returns the file name in which the breakpoint occurs.
3015
-
3016
- @item source=
3017
- @vindex @code{Byebug::Breakpoints.source=}
3018
- Sets the file name in which the breakpoint occurs.
3019
- @end table
3020
-
3021
- @node Byebug.Context
3022
- @subsection The @code{Byebug::Context} Class
3023
- Callbacks in @code{Byebug:Context} get called when a stopping point or an event
3024
- is reached. It has information about the suspended program which enable byebug
3025
- to inspect the frame stack, evaluate variables from the perspective of the
3026
- debugged program, and contains information about the place the debugged program
3027
- is stopped.
3028
-
3029
- @table @code
3030
- @item at_line(@var{file}, @var{line})
3031
- @vindex Byebug::Context::at_line(@var{file}, @var{line})
3032
- This routine is called when byebug encounters a ``line'' event for which it has
3033
- been indicated we want to stop at, such as by hitting a breakpoint or by some
3034
- sort of stepping.
3035
-
3036
- @item at_return(@var{file}, @var{line})
3037
- @vindex Byebug::Context::at_return(@var{file}, @var{line})
3038
- This routine is called when byebug encounters a ``return'' event for which it
3039
- has been indicated we want to stop at, such as by hitting a @code{finish}
3040
- statement.
3041
-
3042
- @item debug_load(@var{file}, @var{stop-initially})
3043
- @vindex Byebug::Context::debug_load(@var{file}, @var{stop-initially})
3044
- This method should be used to debug a file. If the file terminates normally,
3045
- @code{nil} is returned. If not a backtrace is returned.
3046
-
3047
- The @var{stop-initially} parameter indicates whether the program should stop
3048
- after loading. If an explicit call to byebug is in the debugged program, you may
3049
- want to set this @code{false}.
3050
- @end table
3051
-
3052
- @node Byebug.Command
3053
- @subsection The @code{Byebug::Command} Class
3054
- Each command you run is in fact its own class. Should you want to extend byebug,
3055
- it's pretty easy to do since after all byebug is Ruby.
3056
-
3057
- Each @code{Byebug#Command} class should have a @code{regexp} method. This method
3058
- returns regular expression for command-line strings that match your command.
3059
- It's up to you to make sure this regular expression doesn't conflict with
3060
- another one. If it does, it's undefined which one will get matched and run.
3061
-
3062
- In addition the instance needs these methods:
3063
- @table @code
3064
- @item execute
3065
- Code which gets run when you type a command (string) that matches the command's
3066
- regular expression.
3067
- @item description
3068
- A string which gets displayed when folks ask for help on that command.
3069
- @item names
3070
- Names and aliases of the command as an array of strings.
3071
- @end table
3072
-
3073
- Here's a small example of a new command:
3074
- @smallexample
3075
- module Byebug
3076
- class MyCommand < Command
3077
- def regexp
3078
- /^\s*me$/ # Regexp that will match your command
3079
- end
3080
-
3081
- def execute
3082
- puts "hi" # What you want to happen when your command runs
3083
- end
3084
- class << self
3085
- def names
3086
- %w(me)
3087
- end
3088
- def description
3089
- %@{This does whatever it is I want to do@}
3090
- end
3091
- end
3092
- end
3093
- @end smallexample
3094
-
3095
- Now here's an example of how you can load/use it:
3096
- @smallexample
3097
- require 'rubygems'
3098
- require 'byebug'
3099
- require '/tmp/mycmd.rb' # or wherever
3100
- Byebug.start
3101
- x=1
3102
- byebug
3103
- y=2
3104
- @end smallexample
3105
-
3106
- And now an example of invoking it:
3107
- @smallexample
3108
- ruby /tmp/testit.rb:
3109
- /tmp/testit.rb:7
3110
- y=2
3111
- (byebug:1) help
3112
- byebug help v1.1.0
3113
- Type 'help <command-name>' for help on a specific command
3114
- Available commands:
3115
- backtrace delete enable help method putl set trace
3116
- break disable eval info next quit show undisplay
3117
- catch display exit irb p reload source up
3118
- condition down finish list pp restart step var
3119
- continue edit frame me ps save where
3120
- ^^ This is you
3121
-
3122
- (byebug:1) help me
3123
- This does whatever it is I want to do
3124
- (byebug:1) me
3125
- hi
3126
- (byebug:1)
3127
- @end smallexample
3128
-
3129
- @node Kernel routines
3130
- @section Additions to @code{Kernel}
3131
-
3132
- @table @code
3133
-
3134
- @item byebug @ovar{steps=1}
3135
- @vindex @code{Kernel::byebug}
3136
- Enters byebug after @var{steps} line-event steps. Before entering byebug, the
3137
- startup script is read.
3138
-
3139
- Setting @var{steps} to 0 will cause a break in byebug subroutine and not wait
3140
- for any line event to occur. This could be useful you want to stop right after
3141
- the last statement in some scope.
3142
-
3143
- Consider this example:
3144
- @smallexample
3145
- $ cat scope-test.rb
3146
- require 'byebug' ; Byebug.start
3147
- 1.times do
3148
- a = 1
3149
- byebug # implied steps=1
3150
- end
3151
- y = 1
3152
-
3153
- $ ruby scope-test.rb
3154
- y = 1
3155
- (byebug:1) p a
3156
- NameError Exception: undefined local variable or method `a' for main:Object
3157
- (byebug:1)
3158
- @end smallexample
3159
-
3160
- Byebug will stop at the line event which follows @samp{a=1}. This is outside the
3161
- @code{do} block scope where @var{a} is defined. If instead you want to stop
3162
- before leaving the @code{do} loop it is possible to stop right inside
3163
- @code{byebug}; call byebug with 0 zero parameter:
3164
-
3165
- @smallexample
3166
- $ cat scope-test.rb
3167
- require 'byebug' ; Byebug.start
3168
- 1.times do
3169
- a = 1
3170
- byebug(0)
3171
- end
3172
- y = 1
3173
-
3174
- $ ruby scope-test.rb
3175
- ../lib/byebug.rb:386
3176
- Byebug.context.after_frame = 0
3177
- (byebug:1) where
3178
- --> #0 Kernel.byebug(steps#Fixnum) at ../lib/byebug-base.rb:386
3179
- #1 at scope-test.rb:4
3180
- #2 at scope-test.rb:2
3181
- (byebug:1) up
3182
- #1 at scope-test.rb:4
3183
- (byebug:1) p a
3184
- 1
3185
- (byebug:1)
3186
- @end smallexample
3187
-
3188
- As seen above you will have to position the frame up one to be back in your
3189
- debugged program rather than in byebug.
3190
-
3191
- @item breakpoint @ovar{steps=1}
3192
- @vindex @code{Kernel::breakpoint}
3193
- An alias for byebug.
3194
-
3195
- @item binding_n @ovar{n=0}
3196
- @vindex @code{Kernel::binding_n}
3197
- Returns a @samp{binding()} for the @var{n}-th call frame. Note however that you
3198
- need to first call @samp{Byebug.start} before issuing this call.
3199
-
3200
- @end table
3201
-
3202
- @node Contributing
3203
- @appendix Guidelines for contributing
3204
-
3205
- @menu
3206
- * Testing Byebug:: Running Regression Tests
3207
- @end menu
3208
-
3209
- @node Testing Byebug
3210
- @section Testing Byebug
3211
-
3212
- We've put together some basic tests to make sure byebug is doing
3213
- what we think it should do. To run these (from @code{trunk}):
3214
-
3215
- @smallexample
3216
- rake test
3217
- @end smallexample
3218
-
3219
- If you didn't build byebug shared library and skipped step 2,
3220
- don't worry @code{rake test} will do step 2 for you. You should see a
3221
- line that ends something like:
3222
-
3223
- @smallexample
3224
- Finished tests in 2.358177s, 155.2046 tests/s, 172.1669 assertions/s.
3225
-
3226
- 366 tests, 406 assertions, 0 failures, 0 errors, 17 skips
3227
- @end smallexample
3228
-
3229
- The number of seconds, tests, and assertions may be different from the above.
3230
- However you @emph{should} see exactly ``0 failures, 0 errors.''
3231
-
3232
- @node Class Module Method Index
3233
- @unnumbered Class, Module and Method Index
3234
- @printindex vr
3235
-
3236
- @node Command Index
3237
- @unnumbered Command Index
3238
- @printindex ky
3239
-
3240
- @node General Index
3241
- @unnumbered General Index
3242
- @printindex cp
3243
-
3244
- @tex
3245
- % I think something like @colophon should be in texinfo. In the meantime:
3246
- \long\def\colophon{\hbox to0pt{}\vfill
3247
- \centerline{The body of this manual is set in}
3248
- \centerline{\fontname\tenrm,}
3249
- \centerline{with headings in {\bf\fontname\tenbf}}
3250
- \centerline{and examples in {\tt\fontname\tentt}.}
3251
- \centerline{{\it\fontname\tenit\/},}
3252
- \centerline{{\bf\fontname\tenbf}, and}
3253
- \centerline{{\sl\fontname\tensl\/}}
3254
- \centerline{are used for emphasis.}\vfill}
3255
- \page\colophon
3256
- % Blame: doc@cygnus.com, 1991.
3257
- @end tex
3258
-
3259
- @bye