adb(1)adb(1)Nameadb - interactive C program debugger
Syntaxadb [-w] [-k] [-Idir] [objfil [corfil]]
Description
The command is a general purpose debugging program. It may be used to
examine files and to provide a controlled environment for the execution
of UNIX programs.
The objfil is normally an executable program file, preferably contain‐
ing a symbol table. If it does not contain a symbol table then the
symbolic features of cannot be used. However, the file can still be
examined. The default for objfil is The corfil is assumed to be a core
image file produced after executing objfil; the default for corfil is
core.
Requests to are read from the standard input and responses are to the
standard output. If the -w flag is present then both objfil and corfil
are created if necessary and opened for reading and writing so that
files can be modified using
The -k option makes do UNIX kernel memory mapping; it should be used
when core is a UNIX crash dump or
The -I option specifies a directory where files to be read with or (see
the EXPRESSIONS section) are sought. The default directory is
The command ignores QUIT; INTERRUPT causes return to the next command.
In general requests to are of the form
[address] [, count] [command] [;]
If address is present then dot is set to address. Initially dot is set
to 0. For most commands count specifies how many times the command is
executed. The default count is 1. Address and count are expressions.
The interpretation of an address depends on its context. If a subpro‐
cess is being debugged then addresses are interpreted in the usual way
in the address space of the subprocess. If the operating system is
being debugged either post-mortem or using the special file to interac‐
tive examine and/or modify memory the maps are set to map the kernel
virtual addresses which start at 0x80000000. For further details of
address mapping, see ADDRESSES.
Expressions
. The value of dot.
+ The value of dot incremented by the current increment.
^ The value of dot decremented by the current increment.
" The last address typed.
integer A number. The prefixes 0o and 0O (“zero oh”) force inter‐
pretation in octal radix; the prefixes 0t and 0T force
interpretation in decimal radix; the prefixes 0x and 0X
force interpretation in hexadecimal radix. Thus 0o20 =
0t16 = 0x10 = sixteen. If no prefix appears, then the
default radix is used; see the $d command. The default
radix is initially hexadecimal. The hexadecimal digits are
0123456789abcdefABCDEF with the obvious values. Note that
a hexadecimal number whose most significant digit would
otherwise be an alphabetic character must have a 0x (or 0X)
prefix (or a leading zero if the default radix is hexadeci‐
mal).
integer.fraction
A 32 bit floating point number.
´cccc´ The ASCII value of up to 4 characters.
< name The value of name, which is either a variable name or a
register name. The debugger maintains a number of vari‐
ables (see VARIABLES) named by single letters or digits.
If name is a register name then the value of the register
is obtained from the system header in corfil. The register
names are those printed by the $r command.
symbol A symbol is a sequence of upper or lower case letters,
underscores or digits, not starting with a digit. The
backslash character \ may be used to escape other charac‐
ters. The value of the symbol is taken from the symbol ta‐
ble in objfil. An initial underscore (_) will be prepended
to symbol if needed.
_ symbol In C, the true name of an external symbol begins with _.
It may be necessary to use this name to distinguish it from
internal or hidden variables of a program.
routine.name
The address of the variable name in the specified C rou‐
tine. Both routine and name are symbols. If name is omit‐
ted the value is the address of the most recently activated
C stack frame corresponding to routine. This form is cur‐
rently broken on the VAX; local variables can be examined
only with
(exp) The value of the expression exp.
Monadic operators
*exp The contents of the location addressed by exp in corfil.
@exp The contents of the location addressed by exp in objfil.
-exp Integer negation.
~exp Bitwise complement.
#exp Logical negation.
Dyadic operators are left associative and are less binding than monadic
operators.
e1+e2 Integer addition.
e1-e2 Integer subtraction.
e1*e2 Integer multiplication.
e1%e2 Integer division.
e1&e2 Bitwise conjunction.
e1|e2 Bitwise disjunction.
e1#e2 E1 rounded up to the next multiple of e2.
Commands
Most commands consist of a verb followed by a modifier or list of modi‐
fiers. The following verbs are available. The commands question mark
(?) and slash (/) may be followed by an asterisk (*); see the ADDRESSES
section for further details.
?f Locations starting at address in objfil are printed accord‐
ing to the format f. dot is incremented by the sum of the
increments for each format letter.
/f Locations starting at address in corfil are printed accord‐
ing to the format f and dot is incremented as for question
mark (?).
=f The value of address itself is printed in the styles indi‐
cated by the format f. (For i format, the question mark
(?) is printed for the parts of the instruction that refer‐
ence subsequent words.)
A format consists of one or more characters that specify a style of
printing. Each format character may be preceded by a decimal integer
that is a repeat count for the format character. While stepping
through a format, dot is incremented by the amount given for each for‐
mat letter. If no format is given then the last format is used. The
format letters available are as follows:
o2 Print 2 bytes in octal. All octal numbers output by are
preceded by 0.
O4 Print 4 bytes in octal.
q2 Print in signed octal.
Q4 Print long signed octal.
d2 Print in decimal.
D4 Print long decimal.
x2 Print 2 bytes in hexadecimal.
X4 Print 4 bytes in hexadecimal.
u2 Print as an unsigned decimal number.
U4 Print long unsigned decimal.
f4 Print the 32 bit value as a floating point number.
F8 Print double floating point.
b1 Print the addressed byte in octal.
c1 Print the addressed character.
C1 Print the addressed character using the standard escape
convention where control characters are printed as ^X and
the delete character is printed as ^?.
sn Print the addressed characters until a zero character is
reached.
Sn Print a string using the ^X escape convention (see the for‐
mat C1 above). n is the length of the string including its
zero terminator.
Y4 Print 4 bytes in date format. For further information, see
in Print as machine instructions. n is the number of bytes
occupied by the instruction. This style of printing causes
variables 1 and 2 to be set to the offset parts of the
source and destination respectively.
a0 Print the value of dot in symbolic form. Symbols are
checked to ensure that they have an appropriate type as
indicated below:
/ local or global data symbol
? local or global text symbol
= local or global absolute symbol
p4 Print the addressed value in symbolic form using the same
rules for symbol lookup as a0.
t0 When preceded by an integer tabs to the next appropriate
tab stop. For example, 8t moves to the next 8-space tab
stop.
r0 Print a space.
n0 Print a new line.
"..."0 Print the enclosed string.
^ Dot is decremented by the current increment. Nothing is
printed.
+ Dot is incremented by 1. Nothing is printed.
- Dot is decremented by 1. Nothing is printed.
newline Repeat the previous command with a count of 1.
[?/]l value mask
Words starting at dot are masked with mask and compared
with value until a match is found. If L is used then the
match is for 4 bytes at a time instead of 2. If no match
is found then dot is unchanged; otherwise dot is set to the
matched location. If mask is omitted then -1 is used.
[?/]w value ...
Write the 2-byte value into the addressed location. If the
command is W, write 4 bytes. Odd addresses are not allowed
when writing to the subprocess address space.
[?/]m b1 e1 f1[?/]
New values for (b1, e1, f1) are recorded. If less than
three expressions are given then the remaining map parame‐
ters are left unchanged. If the `?' or `/' is followed by
`*' then the second segment (b2,e2,f2) of the mapping is
changed. If the list is terminated by `?' or `/' then the
file (objfil or corfil respectively) is used for subsequent
requests. So that, for example, `/m?' will cause `/' to
refer to objfil.
>name Dot is assigned to the variable or register named.
! A shell (/bin/sh) is called to read the rest of the line
following `!'.
$modifier Miscellaneous commands. The following modifiers are avail‐
able:
<f Read commands from the file f. If this command is
executed in a file, further commands in the file are
not seen. If f is omitted, the current input stream
is terminated. If a count is given, and is zero, the
command will be ignored. The value of the count will
be placed in variable 9 before the first command in f
is executed.
<<f Similar to < except it can be used in a file of com‐
mands without causing the file to be closed. Variable
9 is saved during the execution of this command, and
restored when it completes. There is a (small) finite
limit to the number of << files that can be open at
once.
>f Append output to the file f, which is created if it
does not exist. If f is omitted, output is returned
to the terminal.
? Print process id, the signal which caused stoppage or
termination, as well as registers such as $r. This is
the default if modifier is omitted.
r Print the general registers and the instruction
addressed by pc. Dot is set to pc.
b Print all breakpoints and their associated counts and
commands.
c C stack backtrace. If address is given then it is
taken as the address of the current frame instead of
the contents of the frame-pointer register. If C is
used then the names and (32 bit) values of all auto‐
matic and static variables are printed for each active
function. (broken on the VAX). If count is given then
only the first count frames are printed.
d Set the default radix to address and report the new
value. Note that address is interpreted in the (old)
current radix. Thus “10$d” never changes the default
radix. To make decimal the default radix, use
“0t10$d”.
e The names and values of external variables are
printed.
w Set the page width for output to address (default 80).
s Set the limit for symbol matches to address (default
255).
o All integers input are regarded as octal.
q Exit from
v Print all non zero variables in octal.
m Print the address map.
p (Kernel debugging) Change the current kernel memory
mapping to map the designated user structure to the
address given by the symbol _u. The address argument
is the address of the user's user page table entries.
x (Kernel debugging) The address argument is the CPU
number. Change the current kernel memory mapping to
that of the specified CPU. If no address is provided,
the status of each of the CPUs in the system is dis‐
played. This option is ONLY valid with the -k option.
:modifier Manage a subprocess. The following modifiers are avail‐
able:
bc Set breakpoint at address. The breakpoint is executed
count-1 times before causing a stop. Each time the
breakpoint is encountered the command c is executed.
If this command is omitted or sets dot to zero then
the breakpoint causes a stop.
d Delete breakpoint at address.
r Run objfil as a subprocess. If address is given
explicitly then the program is entered at this point;
otherwise the program is entered at its standard entry
point. count specifies how many breakpoints are to be
ignored before stopping. Arguments to the subprocess
may be supplied on the same line as the command. An
argument starting with < or > causes the standard
input or output to be established for the command.
cs The subprocess is continued with signal s, see If
address is given then the subprocess is continued at
this address. If no signal is specified then the sig‐
nal that caused the subprocess to stop is sent.
Breakpoint skipping is the same as for r.
ss As for c except that the subprocess is single stepped
count times. If there is no current subprocess then
objfil is run as a subprocess as for r. In this case
no signal can be sent; the remainder of the line is
treated as arguments to the subprocess.
k The current subprocess, if any, is terminated.
Variables
The command provides a number of variables. Named variables are set
initially by but are not used subsequently. The following numbered
variables are reserved for communication:
0 The last value printed.
1 The last offset part of an instruction source.
2 The previous value of variable 1.
9 The count on the last or command.
On entry the following are set from the system header in the corfil.
If corfil does not appear to be a core file then these values are set
from objfil.
b The base address of the data segment.
d The data segment size.
e The entry point.
m The `magic' number (0407, 0410 or 0413).
s The stack segment size.
t The text segment size.
Addresses
The address in a file associated with a written address is determined
by a mapping associated with that file. Each mapping is represented by
two triples (b1, e1, f1) and (b2, e2, f2) and the file address corre‐
sponding to a written address is calculated as follows:
b1≤address<e1 => file address=address+f1-b1, otherwise,
b2≤address<e2 => file address=address+f2-b2,
otherwise, the requested address is not legal. In some cases (for
example, for programs with separated I and D space) the two segments
for a file may overlap. If a ? or / is followed by an * then only the
second triple is used.
The initial setting of both mappings is suitable for normal a.out and
core files. If either file is not of the kind expected then, for that
file, b1 is set to 0, e1 is set to the maximum file size and f1 is set
to 0. This way the whole file can be examined with no address transla‐
tion.
Restrictions
Because no shell is invoked to interpret the arguments of the command,
the customary wildcard and variable expansions cannot occur.
Diagnostics
When there is no command or format given to the string `adb' appears.
displays comments about inaccessible files, syntax errors, abnormal
termination of commands, etc. Exit status is 0, unless last command
failed or returned nonzero status.
FilesSee Alsocc(1), dbx(1), ptrace(2), a.out(5), core(5)
VAX adb(1)