]> git.lizzy.rs Git - plan9front.git/blob - sys/man/1/db
merge
[plan9front.git] / sys / man / 1 / db
1 .TH DB 1
2 .SH NAME
3 db \- debugger
4 .SH SYNOPSIS
5 .B db
6 [
7 .I option ...
8 ]
9 [
10 .I textfile
11 ]
12 [
13 .I pid
14 ]
15 .SH DESCRIPTION
16 .I Db
17 is a general purpose debugging program.
18 It may be used to examine files and to provide
19 a controlled environment for the execution
20 of Plan 9 programs.
21 .PP
22 A
23 .I textfile
24 is a file containing the text and initialized
25 data of an executable program.
26 A
27 .I memfile
28 is the memory image of an executing process.  It is
29 usually accessed via the process id
30 .RI ( pid )
31 of the process in
32 .BI /proc/ pid /mem\f1.
33 A
34 .I memfile
35 contains the text, data, and saved registers and
36 process state.  A
37 .I map
38 associated with each
39 .I textfile
40 or
41 .I memfile
42 supports accesses to instructions and data in the file;
43 see `Addresses'.
44 .PP
45 An argument consisting entirely of digits is assumed
46 to be a process id; otherwise, it is the name of a
47 .IR textfile .
48 When a
49 .I textfile
50 is given, the textfile map
51 is associated with it.
52 If only a
53 .I pid
54 is given, the textfile map is
55 associated with
56 .BI /proc/ pid /text\f1.
57 When a
58 .I pid
59 is given, the memfile map is associated with
60 .BI /proc/ pid /mem\f1;
61 otherwise it is undefined and accesses to the
62 .I memfile
63 are not permitted.
64 .PP
65 Commands to
66 .I db
67 are read from the standard input and
68 responses are to the standard output.
69 The options are
70 .TP
71 .BI -k
72 Use the kernel stack of process
73 .IR pid 
74 to debug the executing kernel process.
75 If
76 .I textfile
77 is not specified, file
78 .BI / $cputype /9 type
79 is used, where
80 .I type
81 is the second word in
82 .BR $terminal .
83 .TP
84 .B -w
85 Create
86 .I textfile
87 and
88 .I memfile
89 if they don't exist; open them for writing
90 as well as reading.
91 .TP
92 .BI -I path
93 Directory in which to look for relative path names in
94 .B $<
95 and
96 .B $<<
97 commands.
98 .TP
99 .BI -m machine
100 Assume instructions are for the given CPU type
101 (any standard architecture name, such as
102 .B amd64
103 or
104 .BR 386 ,
105 plus
106 .B mipsco
107 and
108 .BR sunsparc ,
109 which cause disassembly to the manufacturer's syntax)
110 instead of using the magic number to select
111 the CPU type.
112 .PP
113 Most
114 .I db
115 commands have the following form:
116 .IP
117 .RI [ address ]
118 .RB [ ,
119 .IR count ]
120 .RI [ command ]
121 .PP
122 If
123 .I address
124 is present then the current position, called `dot',
125 is set to
126 .IR address .
127 Initially dot
128 is set to 0.
129 Most commands are repeated
130 .I count
131 times with
132 dot advancing between repetitions.
133 The default
134 .I count
135 is 1.
136 .I Address
137 and
138 .I count
139 are expressions.
140 Multiple commands on one line must be separated by
141 .LR ; .
142 .SS Expressions
143 Expressions are evaluated as long
144 .IR ints .
145 .TP 7.2n
146 .B .
147 The value of dot.
148 .TP 7.2n
149 .B +
150 The value of dot
151 incremented by the current increment.
152 .TP 7.2n
153 .B ^
154 The value of dot
155 decremented by the current increment.
156 .TP 7.2n
157 .B \&"
158 The last
159 .I address
160 typed.
161 .TP 7.2n
162 .I integer
163 A number, in decimal radix by default.
164 The prefixes
165 .L 0
166 and
167 .L 0o
168 and
169 .L 0O
170 (zero oh) force interpretation
171 in octal radix; the prefixes
172 .L 0t
173 and
174 .L 0T
175 force interpretation in
176 decimal radix; the prefixes
177 .LR 0x ,
178 .LR 0X ,
179 and
180 .L #
181 force interpretation in
182 hexadecimal radix.
183 Thus
184 .LR 020 ,
185 .LR 0o20 ,
186 .LR 0t16 ,
187 and
188 .L #10 
189 all represent sixteen.
190 .TP 7.2n
191 .IB integer . fraction
192 A single-precision floating point number.
193 .TP 7.2n
194 .BI \' c\| \'
195 The
196 16-bit
197 value of a character.
198 .L \e
199 may be used to escape a
200 .LR \' .
201 .TP 7.2n
202 .BI < name
203 The value of
204 .IR name ,
205 which is a register name.
206 The register names are
207 those printed by the
208 .B $r
209 command.
210 .TP 7.2n
211 .I symbol
212 A
213 .I symbol
214 is a sequence
215 of upper or lower case letters, underscores or
216 digits, not starting with a digit.
217 .L \e
218 may be used to escape other characters.
219 The location of the
220 .I symbol
221 is calculated from the symbol table
222 in
223 .IR textfile .
224 .TP 7.2n
225 .IB routine . name
226 The address of the variable
227 .I name
228 in the specified
229 C routine.
230 Both
231 .I routine
232 and
233 .I name
234 are
235 .IR symbols .
236 If
237 .I name
238 is omitted the value is the address of the
239 most recently activated stack frame
240 corresponding to
241 .IR routine ;
242 if
243 .I routine
244 is omitted,
245 the active procedure
246 is assumed.
247 .TP 7.2n
248 .IB file : integer
249 The address of the instruction corresponding
250 to the source statement at the indicated
251 line number of the file.  If the source line contains
252 no executable statement, the address of the
253 instruction associated with the nearest
254 executable source line is returned.  Files
255 begin at line 1.  If multiple files of the same
256 name are loaded, an expression of this form resolves
257 to the first file encountered in the symbol table.
258 .TP 7.2n
259 .BI ( exp )
260 The value of the expression
261 .IR exp .
262 .LP
263 .I  Monadic operators
264 .RS
265 .TP 7.2n
266 .BI * exp
267 The contents of the location addressed
268 by
269 .I exp
270 in
271 .IR memfile .
272 .TP 7.2n
273 .BI @ exp
274 The contents of the location addressed by
275 .I exp
276 in
277 .IR textfile .
278 .TP 7.2n
279 .BI - exp
280 Integer negation.
281 .TP 7.2n
282 .BI ~ exp
283 Bitwise complement.
284 .TP 7.2n
285 .BI % exp
286 When used as an
287 .IR address ,
288 .I exp
289 is an offset into the segment named
290 .IR ublock ;
291 see `Addresses'.
292 .RE
293 .LP
294 .I "Dyadic\ operators"
295 are left-associative
296 and are less binding than monadic operators.
297 .RS
298 .TP 7.2n
299 .IB e1 + e2
300 Integer addition.
301 .TP 7.2n
302 .IB e1 - e2
303 Integer subtraction.
304 .TP 7.2n
305 .IB e1 * e2
306 Integer multiplication.
307 .TP 7.2n
308 .IB e1 % e2
309 Integer division.
310 .TP 7.2n
311 .IB e1 & e2
312 Bitwise conjunction.
313 .TP 7.2n
314 .IB e1 | e2
315 Bitwise disjunction.
316 .TP 7.2n
317 .IB e1 # e2
318 .I E1
319 rounded up to the next multiple of
320 .IR e2 .
321 .RE
322 .DT
323 .SS Commands
324 Most commands have the following syntax:
325 .TP .5i
326 .BI ? f
327 Locations starting at
328 .I address
329 in
330 .I  textfile
331 are printed according to the format
332 .IR f .
333 .TP
334 .BI / f
335 Locations starting at
336 .I address
337 in
338 .I  memfile
339 are printed according to the format
340 .IR f .
341 .TP
342 .BI = f
343 The value of
344 .I address
345 itself is printed according to the format
346 .IR f .
347 .PP
348 A
349 .I format
350 consists of one or more characters that specify a style
351 of printing.
352 Each format character may be preceded by a decimal integer
353 that is a repeat count for the format character.
354 If no format is given then the last format is used.
355 .PP
356 Most format letters fetch some data,
357 print it,
358 and advance (a local copy of) dot
359 by the number of bytes fetched.
360 The total number of bytes in a format becomes the
361 .IR current increment .
362 .ta 2.5n .5i
363 .RS
364 .TP
365 .PD 0
366 .B o
367 Print two-byte integer in octal.
368 .TP
369 .B O
370 Print four-byte integer in octal.
371 .TP
372 .B q
373 Print two-byte integer in signed octal.
374 .TP
375 .B Q
376 Print four-byte integer in signed octal.
377 .TP
378 .B d
379 Print two-byte integer in decimal.
380 .TP
381 .B D
382 Print four-byte integer in decimal.
383 .TP
384 .B V
385 Print eight-byte integer in decimal.
386 .TP
387 .B Z
388 Print eight-byte integer in unsigned decimal.
389 .TP
390 .B x
391 Print two-byte integer in hexadecimal.
392 .TP
393 .B X
394 Print four-byte integer in hexadecimal.
395 .TP
396 .B Y
397 Print eight-byte integer in hexadecimal.
398 .TP
399 .B u
400 Print two-byte integer in unsigned decimal.
401 .TP
402 .B U
403 Print four-byte integer in unsigned decimal.
404 .TP
405 .B f
406 Print
407 as a single-precision floating point number.
408 .TP
409 .B F
410 Print double-precision floating point.
411 .TP
412 .B b
413 Print the addressed byte in hexadecimal.
414 .TP
415 .B c
416 Print the addressed byte as an
417 .SM ASCII
418 character.
419 .TP
420 .B C
421 Print the addressed byte as a character.
422 Printable
423 .SM ASCII
424 characters
425 are represented normally; others
426 are printed in the form
427 .BR \exnn .
428 .TP
429 .B s
430 Print the addressed characters, as a
431 .SM UTF
432 string, until a zero byte
433 is reached.
434 Advance dot
435 by the length of the string,
436 including the zero terminator.
437 .TP
438 .B S
439 Print a string using 
440 the escape convention (see
441 .B C
442 above).
443 .TP
444 .B r
445 Print as
446 .SM UTF
447 the addressed two-byte integer (rune).
448 .TP
449 .B R
450 Print as
451 .SM UTF
452 the addressed two-byte integers as runes
453 until a zero rune is reached.
454 Advance dot
455 by the length of the string,
456 including the zero terminator.
457 .TP
458 .B i
459 Print as machine instructions.  Dot is
460 incremented by the size of the instruction.
461 .TP
462 .B I
463 As
464 .B i
465 above, but print the machine instructions in
466 an alternate form if possible:
467 .B sunsparc
468 and
469 .B mipsco
470 reproduce the manufacturers' syntax.
471 .TP
472 .B M
473 Print the addressed machine instruction in a
474 machine-dependent hexadecimal form.
475 .TP
476 .B a
477 Print the value of dot
478 in symbolic form.
479 Dot is unaffected.
480 .TP
481 .B A
482 Print the value of dot
483 in hexadecimal.
484 Dot is unaffected.
485 .TP
486 .B z
487 Print the function name, source file, and line number
488 corresponding to dot (textfile only). Dot is unaffected.
489 .TP
490 .B p
491 Print the addressed value in symbolic form.
492 Dot is advanced by the size of a machine address.
493 .TP
494 .B t
495 When preceded by an integer, tabs to the next
496 appropriate tab stop.
497 For example,
498 .B 8t 
499 moves to the next 8-space tab stop.
500 Dot is unaffected.
501 .TP
502 .B n
503 Print a newline.
504 Dot is unaffected.
505 .tr '"
506 .TP
507 .BR ' ... '
508 Print the enclosed string.
509 Dot is unaffected.
510 .br
511 .tr ''
512 .TP
513 .B ^
514 Dot is decremented by the current increment.
515 Nothing is printed.
516 .TP
517 .B +
518 Dot is incremented by 1.
519 Nothing is printed.
520 .TP
521 .B -
522 Dot is decremented by 1.
523 Nothing is printed.
524 .RE
525 .PD
526 .LP
527 Other commands include:
528 .TP
529 newline
530 Update dot by the current increment.
531 Repeat the previous command with a
532 .I count
533 of 1.
534 .TP
535 .RB [ ?/ ] l "\fI value mask\fR"
536 Words starting at dot
537 are masked with
538 .I mask
539 and compared with
540 .I value
541 until
542 a match is found.
543 If
544 .B l
545 is used,
546 the match is for a two-byte integer;
547 .B L
548 matches four bytes.
549 If no match is found then dot
550 is unchanged; otherwise dot
551 is set to the matched location.
552 If
553 .I mask
554 is omitted then ~0 is used.
555 .TP
556 .RB [ ?/ ] w "\fI value ...\fR"
557 Write the two-byte
558 .I value
559 into the addressed
560 location.
561 If the command is
562 .BR W ,
563 write four bytes.
564 .TP
565 .RB [ ?/ ] "m\fI s b e f \fP" [ ?\fR]
566 .br
567 New values for
568 .RI ( b,\ e,\ f )
569 in the segment named
570 .I s
571 are recorded.  Valid segment names are
572 .IR text ,
573 .IR data ,
574 or 
575 .IR ublock .
576 If less than three address expressions are given,
577 the remaining parameters are left unchanged.
578 If the list is terminated by
579 .L ?
580 or
581 .L /
582 then the file
583 .RI ( textfile
584 or
585 .I memfile
586 respectively) is used
587 for subsequent requests.
588 For example,
589 .L /m?
590 causes
591 .L /
592 to refer to
593 .IR textfile .
594 .TP
595 .BI > name
596 Dot is assigned to the variable or register named.
597 .TP
598 .B !
599 The rest of the line is passed to
600 .IR rc (1)
601 for execution.
602 .TP
603 .BI $ modifier
604 Miscellaneous commands.
605 The available 
606 .I modifiers 
607 are:
608 .RS
609 .TP
610 .PD 0
611 .BI < f
612 Read commands from the file
613 .IR f .
614 If this command is executed in a file, further commands
615 in the file are not seen.
616 If
617 .I f
618 is omitted, the current input stream is terminated.
619 If a
620 .I count
621 is given, and is zero, the command is ignored.
622 .TP
623 .BI << f
624 Similar to
625 .B <
626 except it can be used in a file of commands without
627 causing the file to be closed.
628 There is a (small) limit to the number of
629 .B <<
630 files that can be open at once.
631 .br
632 .ns
633 .TP
634 .BI > f
635 Append output to the file
636 .IR f ,
637 which is created if it does not exist.
638 If
639 .I f
640 is omitted, output is returned to the terminal.
641 .TP
642 .B ?
643 Print process id, the condition which caused stopping or termination,
644 the registers and the instruction addressed by
645 .BR pc .
646 This is the default if
647 .I modifier
648 is omitted.
649 .TP
650 .B r
651 Print the general registers and
652 the instruction addressed by
653 .BR pc .
654 Dot is set to
655 .BR pc .
656 .TP
657 .B R
658 Like
659 .BR $r ,
660 but include miscellaneous processor control registers
661 and floating point registers.
662 .TP
663 .B f
664 Print floating-point register values as
665 single-precision floating point numbers.
666 .TP
667 .B F
668 Print floating-point register values as
669 double-precision floating point numbers.
670 .TP
671 .B b
672 Print all breakpoints
673 and their associated counts and commands.  `B' produces the same results.
674 .TP
675 .B c
676 Stack backtrace.
677 If
678 .I address
679 is given, it specifies the address of a pair of 32-bit
680 values containing the
681 .B sp
682 and
683 .B pc
684 of an active process.  This allows selecting
685 among various contexts of a multi-threaded
686 process.
687 If
688 .B C
689 is used, the names and (long) values of all
690 parameters,
691 automatic
692 and static variables are printed for each active function.
693 If
694 .I count
695 is given, only the first
696 .I count
697 frames are printed.
698 .TP
699 .B a
700 Attach to the running process whose pid
701 is contained in
702 .IR address .
703 .TP
704 .B e
705 The names and values of all
706 external variables are printed.
707 .TP
708 .B w
709 Set the page width for output to
710 .I address
711 (default 80).
712 .TP
713 .B q
714 Exit from
715 .IR db .
716 .TP
717 .B m
718 Print the address maps.
719 .TP
720 .B k
721 Simulate kernel memory management.
722 .TP
723 .BI M machine
724 Set the
725 .I machine
726 type used for disassembling instructions.
727 .PD
728 .RE
729 .TP
730 .BI : modifier
731 Manage a subprocess.
732 Available modifiers are:
733 .RS
734 .TP
735 .PD 0
736 .BI h
737 Halt
738 an asynchronously running process to allow breakpointing.
739 Unnecessary for processes created under
740 .IR db ,
741 e.g. by
742 .BR :r .
743 .TP
744 .BI b c
745 Set breakpoint at
746 .IR address .
747 The breakpoint is executed
748 .IR count \-1
749 times before
750 causing a stop.
751 Also, if a command
752 .I c
753 is given it is executed at each
754 breakpoint and if it sets dot to zero
755 the breakpoint causes a stop.
756 .TP
757 .B d
758 Delete breakpoint at
759 .IR address .
760 .TP
761 .B r
762 Run
763 .I textfile
764 as a subprocess.
765 If
766 .I address
767 is given the
768 program is entered at that point; otherwise
769 the standard entry point is used.
770 .I Count
771 specifies how many breakpoints are to be
772 ignored before stopping.
773 Arguments to the subprocess may be supplied on the
774 same line as the command.
775 An argument starting with < or > causes the standard
776 input or output to be established for the command.
777 .TP
778 .BI c s
779 The subprocess is continued.
780 If
781 .I s
782 is omitted
783 or nonzero,
784 the subprocess
785 is sent the note that caused it to stop.
786 If 0
787 is specified,
788 no note is sent.
789 (If the stop was due to a breakpoint or single-step,
790 the corresponding note is elided before continuing.)
791 Breakpoint skipping is the same
792 as for
793 .BR r .
794 .TP
795 .BI s s
796 As for
797 .B c
798 except that
799 the subprocess is single stepped for
800 .I count
801 machine instructions.
802 If a note is pending,
803 it is received
804 before the first instruction is executed.
805 If there is no current subprocess then
806 .I textfile
807 is run
808 as a subprocess as for
809 .BR r .
810 In this case no note can be sent; the remainder of the line
811 is treated as arguments to the subprocess.
812 .TP
813 .BI S s
814 Identical to
815 .B s
816 except the subprocess is single stepped for
817 .I count
818 lines of C source.  In optimized code, the correspondence
819 between C source and the machine instructions is
820 approximate at best.
821 .TP
822 .BI x
823 The current subprocess, if any, is released by
824 .I db
825 and allowed to continue executing normally.
826 .TP
827 .B k
828 The current subprocess, if any, is terminated.
829 .TP
830 .BI n c
831 Display the pending notes for the process.
832 If
833 .I c
834 is specified, first delete
835 .I c'th
836 pending note.
837 .PD
838 .RE
839 .SS Addresses
840 The location in a file or memory image associated with
841 an address is calculated from a map
842 associated with the file.
843 Each map contains one or more quadruples
844 .RI ( "t, b, e, f" ),
845 defining a segment named
846 .I t
847 (usually, 
848 .IR text ,
849 .IR data ,
850 or
851 .IR ublock )
852 mapping addresses in the range
853 .I b
854 through
855 .I e
856 to the part of the file
857 beginning at
858 offset
859 .IR f .
860 The memory model of a Plan 9 process assumes
861 that segments are disjoint.  There
862 can be more than one segment of a given type (e.g., a process
863 may have more than one text segment) but segments
864 may not overlap.
865 An address
866 .I a
867 is translated
868 to a file address
869 by finding a segment
870 for which
871 .IR b ≤ a < e ;
872 the location in the file
873 is then
874 .IR address + f \- b .
875 .PP
876 Usually,
877 the text and initialized data of a program
878 are mapped by segments called 
879 .I text
880 and
881 .IR data .
882 Since a program file does not contain bss, stack or ublock data,
883 these data are
884 not mapped by the data segment.
885 The text segment is mapped similarly in
886 a normal (i.e., non-kernel)
887 .IR memfile .
888 However, the segment called 
889 .I data
890 maps memory from the beginning of the program's data space to
891 the base of the ublock.
892 This region contains the program's static data, the bss, the
893 heap and the stack.  A segment
894 called
895 .I ublock
896 maps the page containing its registers and process state.
897 .PP
898 Sometimes it is useful to define a map with a single segment
899 mapping the region from 0 to 0xFFFFFFFF; a map of this type
900 allows the entire file to be examined
901 without address translation.
902 .PP
903 Registers are saved at a machine-dependent offset in the ublock.
904 It is usually not necessary to know this offset; the
905 .BR $r ,
906 .BR $R ,
907 .BR $f ,
908 and
909 .BR $F
910 commands calculate it and display the register contents.
911 .PP
912 The
913 .B $m
914 command dumps the currently active maps.  The
915 .B ?m
916 and
917 .B /m
918 commands modify the segment parameters in the
919 .I textfile
920 and
921 .I memfile
922 maps, respectively.
923 .SH EXAMPLES
924 To set a breakpoint at the beginning of
925 .B write()
926 in extant process 27:
927 .IP
928 .EX
929 % db 27
930 :h
931 write:b
932 :c
933 .EE
934 .PP
935 To examine the Plan 9 kernel stack for process 27:
936 .IP
937 .EX
938 % db -k 27
939 $C
940 .EE
941 .PP
942 Similar, but using a kernel named
943 .BR test :
944 .IP
945 .EX
946 % db -k test 27
947 $C
948 .EE
949 .PP
950 To set a breakpoint at the entry of function
951 .B parse
952 when the local variable
953 .B argc
954 in
955 .B main
956 is equal to 1:
957 .IP
958 .EX
959 parse:b *main.argc-1=X
960 .EE
961 .PP
962 This prints the value of
963 .B argc-1
964 which as a side effect sets dot; when
965 .B argc
966 is one the breakpoint will fire.
967 Beware that local variables may be stored in registers; see the
968 BUGS section.
969 .PP
970 Debug process 127 on remote machine
971 .BR kremvax :
972 .IP
973 .EX
974 % import kremvax /proc
975 % db 127
976 $C
977 .EE
978 .SH FILES
979 .B /proc/*/text
980 .br
981 .B /proc/*/mem
982 .br
983 .B /proc/*/ctl
984 .br
985 .B /proc/*/note
986 .SH "SEE ALSO"
987 .IR acid (1),
988 .IR nm (1),
989 .IR proc (3)
990 .SH SOURCE
991 .B /sys/src/cmd/db
992 .SH DIAGNOSTICS
993 Exit status is null, unless the last command failed or
994 returned non-null status.
995 .SH BUGS
996 Examining a local variable with
997 .I routine.name
998 returns the contents of the memory allocated for the variable, but
999 with optimization (suppressed by the
1000 .B -N
1001 compiler flag) variables often reside in registers.
1002 Also, on some architectures, the first argument is always
1003 passed in a register.
1004 .PP
1005 Variables and parameters that have been
1006 optimized away do not appear in the
1007 symbol table, returning the error 
1008 .IR "bad local variable"
1009 when accessed by
1010 .IR db .
1011 .PP
1012 Because of alignment incompatibilities, Motorola 68000
1013 series machines can not be debugged remotely from a
1014 processor of a different type.
1015 .PP
1016 Breakpoints should not be set on instructions scheduled
1017 in delay slots.  When a program stops on such a breakpoint,
1018 it is usually impossible to continue its execution.