SDB(1) COMMAND REFERENCE SDB(1)
NAME
sdb - symbolic debugger
SYNOPSIS
sdb [ objfil [ corfil [ directory ] ] ]
DESCRIPTION
Sdb is a symbolic debugger which can be used with C, PASCAL,
and F77 programs. It may be used to examine their files and
to provide a controlled environment for their execution.
Objfil is an executable program file which has been compiled
with the -go (debug) on the C and F77 compilers or the -g
(debug) option on the Pascal compiler. The default for
objfil is a.out. Corfil is assumed to be a core image file
produced after executing objfil; the default for corfil is
core. The core file need not be present. If objfil and
corfil are both present, then directory may be used to
specify the directory containing the source files for objfil
. Otherwise the source files are assumed to be in the
current directory.
It is useful to know that at any time there is a current
line and current file. If corfil exists then they are
initially set to the line and file containing the source
statement at which the process terminated or stopped.
Otherwise, they are set to the first line in main. The
current line and file may be changed with the source file
examination commands.
Names of variables are written just as they are in C,
PASCAL, or F77. Note that the F77 compiler converts names
to lower case. Variables local to a procedure may be
accessed using the form procedure:variable. If no procedure
name is given, the procedure containing the current line is
used by default. It is also possible to refer to structure
members as variable.member, pointers to structure members as
variable->member and array elements as variable[number].
Combinations of these forms may also be used.
It is also possible to specify a variable by its address.
All forms of integer constants which are valid in C may be
used, so that addresses may be input in decimal, octal, or
hexadecimal.
Line numbers in the source program are referred to as
filename:number or procedure:number. In either case the
number is relative to the beginning of the file. If no
procedure or filename is given, the current file is used by
default. If no number is given, the first line of the named
procedure or file is used.
Printed 4/6/89 1
SDB(1) COMMAND REFERENCE SDB(1)
Commands
t Print a stack trace of the terminated or stopped program.
T Print the top line of the stack trace.
variable/lm
Print the value of variable according to length l and
format m. If l and m are omitted, sdb chooses a length
and format suitable for the variable's type as declared
in the program. The length specifiers are:
b one byte
h two bytes (half word)
l four bytes (long word)
number string length for formats s and a
Legal values for m are:
c character
d decimal
u decimal, unsigned
o octal
x hexadecimal
f 32 bit single precision floating point
g 64 bit double precision floating point
i machine instruction with symbolic information
(constant address only)
I machine instruction without symbolic information
(constant address only)
s Assume variable is a string pointer and print
characters until a null is reached.
a Print characters starting at the variable's address
until a null is reached.
p pointer to procedure
The length specifiers are only effective with the formats d,
u, o and x. If one of these formats is specified and l is
Printed 4/6/89 2
SDB(1) COMMAND REFERENCE SDB(1)
omitted, the length defaults to the word length of the host
machine. The last variable may be redisplayed with the
command dot-slash (./). <CTRL-D> will display the next 10
addresses following the address of the last variable
displayed. This option is useful for dumping arrays and
stacks.
Registers may also be dislayed by placing the register name
followed by a % in place of variable.
The sh(1sh) metacharacters * and ? may be used within
procedure and variable names, providing a limited form of
pattern matching. If no procedure name is given, both
variables local to the current procedure and global (common
for F77) variables are matched, while if a procedure name is
specified then only variables local to that procedure and
matched. To match only global variables (or blank common
for F77), the form :pattern is used. The name of a common
block may be specified instead of a procedure name for F77
programs.
variable=lm
linenumber=lm
number=lm
procedure:=lm
Print the address of the variable,procedure or line
number, or the value of the number in the specified
format. If no format is given, then lx is used. The
last variant of this command provides a convenient way to
convert between decimal, octal, and hexadecimal. If the
variable is of type register the register number will be
printed.
variable!value
Set the variable to the given value. The value may be a
number, character constant, or a variable. If the
variable is of type float or double, the value may also
be a floating constant.
linenumber?
Disassemble the first machine instruction associated with
linenumber. <CTRL-D> will disassemble the next 10
instructions following the last one disassembled.
Commands For Examining Source Files
eprocedure
efilename.c
Printed 4/6/89 3
SDB(1) COMMAND REFERENCE SDB(1)
Set the current file to the file containing the named
procedure or the filename. Set the current line to the
first line in the named procedure or file. All source
files are assumed to be in directory. The default for
directory is the working directory. If no procedure or
filename is given, the current procedure and filenames
are reported.
/regular expression/
Search forward from the current line for a line
containing a string matching the regular expression as in
ed(1). The trailing slash (/) may be elided.
?regular expression?
Search backward from the current line for a line
containing a string matching the regular expression as in
ed(1). The trailing ? may be elided.
p Print the current line.
z Print the current line followed by the next 9 lines. Set
the current line to the last line printed.
<CTRL-D>
Scroll. Print the next 10 lines. Set the current line
to the last line printed.
w Window. Print the 10 lines around the current line.
number
Set the current line to the given linenumber. Print the
new current line.
count +
Advance the current line by count lines. Print the new
current line.
count -
Retreat the current line by count lines. Print the new
current line.
Commands For Controllling The Execution Of The Source
Program
count r args
count R
Run the program with the given arguments. The r command
with no arguments reuses the previous arguments to the
program while the R command runs the program with no
arguments. An argument beginning with < or > causes
redirection for the standard input or output
Printed 4/6/89 4
SDB(1) COMMAND REFERENCE SDB(1)
respectively. If count is given, it specifies the number
of breakpoints to be ignored.
linenumber c count
linenumber C count
Continue after a breakpoint or interrupt. If count is
given, it specifies the number of breakpoints to be
ignored. C continues with the signal which caused the
program to stop and c ignores it.
If a linenumber is specified then a temporary breakpoint
is placed at the line and execution is continued. The
breakpoint is deleted when the command finishes.
count s
Single step. Run the program through count lines. If no
count is given then the program is run for one line.
count S
Single step, but step through subroutine calls.
count i
count I
Single step machine instruction. Run the program through
count machine instructions. If no count is given then
the program is run for one instruction. I reactivates
the signal the program is stopped with and i ignores it.
k Kill the debugged program.
procedure(arg1,arg2,...)
procedure(arg1,arg2,...)/m
Execute the named procedure with the given arguments.
Arguments can be integer, character or string constants
or names of variables accessible from the current
procedure. The second form causes the value returned by
the procedure to be printed according to format m. If no
format is given, it defaults to d.
linenumber b commands
Set a breakpoint at the given line. If a procedure name
without a linenumber is given (for example, proc:), a
breakpoint is placed at the first line in the procedure
even if it was not compiled with the debug flag. If no
linenumber is given, a breakpoint is placed at the
current line. If no commands are given then execution
stops just before the breakpoint and control is returned
to sdb. Otherwise the commands are executed when the
breakpoint is encountered and execution continues.
Printed 4/6/89 5
SDB(1) COMMAND REFERENCE SDB(1)
Multiple commands are specified by separating them with
semicolons.
linenumber d
Delete a breakpoint at the given line. If no linenumber
is given then the breakpoints are deleted interactively:
Each breakpoint location is printed and a line is read
from the standard input. If the line begins with a y or
d then the breakpoint is deleted.
B Print a list of the currently active breakpoints.
D Delete all breakpoints.
l Print the last executed line.
linenumber a
Announce. If linenumber is of the form proc:number, the
command effectively does a linenumber b l. If linenumber
is of the form proc:, the command effectively does a
proc: b T.
Miscellaneous Commands
variable$ m
Single step until variable changes. Variable can be in
any specified active procedure. This will not work with
register variables. It is also very, very slow.
v Toggle verbose mode. This causes the machine instructions
to be printed as they are executed when single stepping
with s or S.
x Display contents of all machine registers.
X Display current value of pc and disassemble current
instruction.
! command
The command is interpreted by sh(1sh).
<newline>
If the previous command printed a source line then
advance the current line by one line and print the new
current line. If the previous command displayed a core
location then display the next core location.
" string
Print the given string.
q Exit the debugger.
Printed 4/6/89 6
SDB(1) COMMAND REFERENCE SDB(1)
The following commands also exist and are intended only for
debugging the debugger:
V Print the version number.
Q Print a list of procedures and files being debugged.
Y Toggle debug output.
M Print locations of text and data segments in object and
core files.
FILES
a.out Default binary file
core Default core image file
DIAGNOSTICS
Error reports are either identical to those of adb(1) or are
self-explanatory.
CAVEATS
If a procedure is called when the program is not stopped at
a breakpoint (such as when a core image is being debugged),
all variables are initialized before the procedure is
started. This makes it impossible to use a procedure which
formats data from a core image.
Arrays must be of one dimension and of zero origin to be
correctly addressed by sdb.
The default type for printing F77 parameters is incorrect.
Their address is printed instead of their value.
Tracebacks containing F77 subprograms with multiple entry
points may print too many arguments in the wrong order, but
their values are correct.
Sdb understands Pascal, but not its types.
If your C program has two structures with elements that have
the same name but different types or offsets, sdb will be
unable to distinguish which element belongs to which
structure.
SEE ALSO
adb(1) and sh(1sh).
Printed 4/6/89 7
%%index%%
na:216,75;
sy:291,207;
de:498,2865;3651,1747;5686,2658;8632,2711;11631,2582;14501,2328;17117,367;
fi:17484,142;
di:17626,220;
ca:17846,1094;
se:18940,127;
%%index%%000000000188