BSD 4_3_Reno development
[unix-history] / usr / share / man / cat1 / dbx.0
DBX(1) UNIX Reference Manual DBX(1)
N\bNA\bAM\bME\bE
d\bdb\bbx\bx - debugger
S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
D\bDb\bbx\bx [-\b-r\br] [-\b-i\bi] [-\b-k\bk] [-\b-I\bI _\bd_\bi_\br] [-\b-c\bc _\bf_\bi_\bl_\be] [_\bo_\bb_\bj_\bf_\bi_\bl_\be [_\bc_\bo_\br_\be_\bd_\bu_\bm_\bp]]
D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
D\bDb\bbx\bx is a tool for source level debugging and execution of programs under
UNIX. The _\bo_\bb_\bj_\bf_\bi_\bl_\be is an object file produced by a compiler with the ap-
propriate flag (usually -\b-g\bg) specified to produce symbol information in
the object file. Currently, cc(1), f77(1), pc(1), and the DEC Western
Research Laboratory Modula-2 compiler, mod(l), produce the appropriate
source information. The machine level facilities of d\bdb\bbx\bx can be used on
any program.
The object file contains a symbol table that includes the names of all
the source files translated by the compiler to create it. These files
are available for perusal while using the debugger.
If a file named _\bc_\bo_\br_\be exists in the current directory or a _\bc_\bo_\br_\be_\bd_\bu_\bm_\bp file
is specified, d\bdb\bbx\bx can be used to examine the state of the program when it
faulted.
If the file ._\bd_\bb_\bx_\bi_\bn_\bi_\bt exists in the current directory then the debugger
commands in it are executed. D\bDb\bbx\bx also checks for a ._\bd_\bb_\bx_\bi_\bn_\bi_\bt in the
user's home directory if there isn't one in the current directory.
The command line options and their meanings are:
-\b-r\br Execute _\bo_\bb_\bj_\bf_\bi_\bl_\be immediately. If it terminates successfully d\bdb\bbx\bx
exits. Otherwise the reason for termination will be reported
and the user offered the option of entering the debugger or
letting the program fault. D\bDb\bbx\bx will read from /_\bd_\be_\bv/_\bt_\bt_\by when -\b-r\br
is specified and standard input is not a terminal.
-\b-i\bi Force d\bdb\bbx\bx to act as though standard input is a terminal.
-\b-k\bk Map memory addresses, useful for kernel debugging.
-\b-I\bI _\bd_\bi_\br Add _\bd_\bi_\br to the list of directories that are searched when look-
ing for a source file. Normally d\bdb\bbx\bx looks for source files in
the current directory and in the directory where _\bo_\bb_\bj_\bf_\bi_\bl_\be is lo-
cated. The directory search path can also be set with the u\bus\bse\be
command.
-\b-c\bc _\bf_\bi_\bl_\be Execute the d\bdb\bbx\bx commands in the _\bf_\bi_\bl_\be before reading from stan-
dard input.
Unless -\b-r\br is specified, d\bdb\bbx\bx just prompts and waits for a command.
E\bEx\bxe\bec\bcu\but\bti\bio\bon\bn a\ban\bnd\bd T\bTr\bra\bac\bci\bin\bng\bg C\bCo\bom\bmm\bma\ban\bnd\bds\bs
r\bru\bun\bn [_\ba_\br_\bg_\bs] [<\b< _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be] [>\b> _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be]
r\bre\ber\bru\bun\bn [_\ba_\br_\bg_\bs] [<\b< _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be] [>\b> _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be]
Start executing _\bo_\bb_\bj_\bf_\bi_\bl_\be, passing _\ba_\br_\bg_\bs as command line argu-
ments; <\b< or >\b> can be used to redirect input or output in the
usual manner. When r\bre\ber\bru\bun\bn is used without any arguments the
previous argument list is passed to the program; otherwise it
is identical to r\bru\bun\bn. If _\bo_\bb_\bj_\bf_\bi_\bl_\be has been written since the
last time the symbolic information was read in, d\bdb\bbx\bx will read
in the new information.
t\btr\bra\bac\bce\be [i\bin\bn _\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn] [i\bif\bf _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn]
t\btr\bra\bac\bce\be _\bs_\bo_\bu_\br_\bc_\be-_\bl_\bi_\bn_\be-_\bn_\bu_\bm_\bb_\be_\br [i\bif\bf _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn]
t\btr\bra\bac\bce\be _\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn [i\bin\bn _\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn] [i\bif\bf _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn]
t\btr\bra\bac\bce\be _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn a\bat\bt _\bs_\bo_\bu_\br_\bc_\be-_\bl_\bi_\bn_\be-_\bn_\bu_\bm_\bb_\be_\br [i\bif\bf _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn]
t\btr\bra\bac\bce\be _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be [i\bin\bn _\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn] [i\bif\bf _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn]
Have tracing information printed when the program is executed.
A number is associated with the command that is used to turn
the tracing off (see the d\bde\bel\ble\bet\bte\be command).
The first argument describes what is to be traced. If it is a
_\bs_\bo_\bu_\br_\bc_\be-_\bl_\bi_\bn_\be-_\bn_\bu_\bm_\bb_\be_\br, then the line is printed immediately prior
to being executed. Source line numbers in a file other than
the current one must be preceded by the name of the file in
quotes and a colon, e.g. "mumble.p":17.
If the argument is a procedure or function name then every time
it is called, information is printed telling what routine
called it, from what source line it was called, and what param-
eters were passed to it. In addition, its return is noted, and
if it's a function then the value it is returning is also
printed.
If the argument is an _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn with an a\bat\bt clause then the
value of the expression is printed whenever the identified
source line is reached.
If the argument is a variable then the name and value of the
variable is printed whenever it changes. Execution is substan-
tially slower during this form of tracing.
If no argument is specified then all source lines are printed
before they are executed. Execution is substantially slower
during this form of tracing.
The clause i\bin\bn _\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn restricts tracing information
to be printed only while executing inside the given procedure
or function.
_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn is a boolean expression and is evaluated prior to
printing the tracing information; if it is false then the in-
formation is not printed.
s\bst\bto\bop\bp i\bif\bf _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn
s\bst\bto\bop\bp a\bat\bt _\bs_\bo_\bu_\br_\bc_\be-_\bl_\bi_\bn_\be-_\bn_\bu_\bm_\bb_\be_\br [i\bif\bf _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn]
s\bst\bto\bop\bp i\bin\bn _\bs_\bo_\bu_\br_\bc_\be-_\bl_\bi_\bn_\be-_\bn_\bu_\bm_\bb_\be_\br [i\bif\bf _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn]
s\bst\bto\bop\bp _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be [i\bif\bf _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn]
Stop execution when the given line is reached, procedure or
function called, variable changed, or condition true.
s\bst\bta\bat\btu\bus\bs [>\b> _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be]
Print out the currently active t\btr\bra\bac\bce\be and s\bst\bto\bop\bp commands.
d\bde\bel\ble\bet\bte\be _\bc_\bo_\bm_\bm_\ba_\bn_\bd-_\bn_\bu_\bm_\bb_\be_\br ...
The traces or stops corresponding to the given numbers are
removed. The numbers associated with traces and stops are
printed by the s\bst\bta\bat\btu\bus\bs command.
c\bca\bat\btc\bch\bh _\bn_\bu_\bm_\bb_\be_\br
c\bca\bat\btc\bch\bh _\bs_\bi_\bg_\bn_\ba_\bl-_\bn_\ba_\bm_\be
i\big\bgn\bno\bor\bre\be _\bn_\bu_\bm_\bb_\be_\br
i\big\bgn\bno\bor\bre\be _\bs_\bi_\bg_\bn_\ba_\bl-_\bn_\ba_\bm_\be
Start or stop trapping a signal before it is sent to the
program. This is useful when a program being debugged handles
signals such as interrupts. A signal may be specified by
number or by a name (e.g., SIGINT). Signal names are case
insensitive and the ``SIG'' prefix is optional. By default all
signals are trapped except SIGCONT, SIGCHILD, SIGALRM and
SIGKILL.
c\bco\bon\bnt\bt _\bi_\bn_\bt_\be_\bg_\be_\br
c\bco\bon\bnt\bt _\bs_\bi_\bg_\bn_\ba_\bl-_\bn_\ba_\bm_\be
Continue execution from where it stopped. If a signal is
specified, the process continues as though it received the
signal. Otherwise, the process is continued as though it had
not been stopped.
Execution cannot be continued if the process has ``finished'',
that is, called the standard procedure ``exit''. D\bDb\bbx\bx does not
allow the process to exit, thereby letting the user to examine
the program state.
s\bst\bte\bep\bp Execute one source line.
n\bne\bex\bxt\bt Execute up to the next source line. The difference between
this and s\bst\bte\bep\bp is that if the line contains a call to a pro-
cedure or function the s\bst\bte\bep\bp command will stop at the beginning
of that block, while the n\bne\bex\bxt\bt command will not.
r\bre\bet\btu\bur\brn\bn [_\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be]
Continue until a return to _\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be is executed, or until the
current procedure returns if none is specified.
c\bca\bal\bll\bl _\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be (_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs)
Execute the object code associated with the named procedure or
function.
P\bPr\bri\bin\bnt\bti\bin\bng\bg V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs a\ban\bnd\bd E\bEx\bxp\bpr\bre\bes\bss\bsi\bio\bon\bns\bs
Names are resolved first using the static scope of the current function,
then using the dynamic scope if the name is not defined in the static
scope. If static and dynamic searches do not yield a result, an
arbitrary symbol is chosen and the message ``[using Ar qualified name]''
is printed. The name resolution procedure may be overridden by qualify-
ing an identifier with a block name, e.g., ``module.variable'' For C,
source files are treated as modules named by the file name without
``.c''.
Expressions are specified with an approximately common subset of C and
Pascal (or equivalently Modula-2) syntax. Indirection can be denoted us-
ing either a prefix ``*'' or a postfix ``^'' and array expressions are
subscripted by brackets (``[]''). The field reference operator (``.'')
can be used with pointers as well as records, making the C operator
``->'' unnecessary (although it is supported).
Types of expressions are checked; the type of an expression may be
overridden by using ``_\bt_\by_\bp_\be-_\bn_\ba_\bm_\be (_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn)''. When there is no
corresponding named type the special constructs ``&_\bt_\by_\bp_\be-_\bn_\ba_\bm_\be'' and
``$$_\bt_\ba_\bg-_\bn_\ba_\bm_\be'' can be used to represent a pointer to a named type or C
structure tag.
a\bas\bss\bsi\big\bgn\bn _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be=\b=_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn
Assign the value of the expression to the variable.
d\bdu\bum\bmp\bp [_\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be] [>\b> _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be]
Print the names and values of variables in the given procedure,
or the current one if none is specified. If the procedure
given is ``.'', then the all active variables are dumped.
p\bpr\bri\bin\bnt\bt _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn [,\b, _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn ...]
Print out the values of the expressions.
w\bwh\bha\bat\bti\bis\bs _\bn_\ba_\bm_\be
Print the declaration of the given name, which may be qualified
with block names as above.
w\bwh\bhi\bic\bch\bh _\bi_\bd_\be_\bn_\bt_\bi_\bf_\bi_\be_\br
Print the full qualification of the given identifer, i.e. the
outer blocks that the identifier is associated with.
u\bup\bp [_\bc_\bo_\bu_\bn_\bt]
d\bdo\bow\bwn\bn [_\bc_\bo_\bu_\bn_\bt]
Move the current function, which is used for resolving names,
up or down the stack _\bc_\bo_\bu_\bn_\bt levels. The default _\bc_\bo_\bu_\bn_\bt is 1.
w\bwh\bhe\ber\bre\be Print out a list of the active procedures and function.
w\bwh\bhe\ber\bre\bei\bis\bs _\bi_\bd_\be_\bn_\bt_\bi_\bf_\bi_\be_\br
Print the full qualification of all the symbols whose name
matches the given identifier. The order in which the symbols
are printed is not meaningful.
A\bAc\bcc\bce\bes\bss\bsi\bin\bng\bg S\bSo\bou\bur\brc\bce\be F\bFi\bil\ble\bes\bs
/_\br_\be_\bg_\bu_\bl_\ba_\br _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn[/]
?_\br_\be_\bg_\bu_\bl_\ba_\br _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn[?]
Search forward or backward in the current source file
for the given pattern.
e\bed\bdi\bit\bt [_\bf_\bi_\bl_\be_\bn_\ba_\bm_\be]
e\bed\bdi\bit\bt _\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn-_\bn_\ba_\bm_\be
Invoke an editor on _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be or the current source
file if none is specified. If a _\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be or
_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn name is specified, the editor is invoked on
the file that contains it. Which editor is invoked
by default depends on the installation. The default
can be overridden by setting the environment variable
EDITOR to the name of the desired editor.
f\bfi\bil\ble\be [_\bf_\bi_\bl_\be_\bn_\ba_\bm_\be] Change the current source file name to _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be. If
none is specified then the current source file name
is printed.
f\bfu\bun\bnc\bc [_\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn]
Change the current function. If none is specified
then print the current function. Changing the
current function implicitly changes the current
source file to the one that contains the function; it
also changes the current scope used for name
resolution.
l\bli\bis\bst\bt [_\bs_\bo_\bu_\br_\bc_\be-_\bl_\bi_\bn_\be-_\bn_\bu_\bm_\bb_\be_\br [,\b,_\bs_\bo_\bu_\br_\bc_\be-_\bl_\bi_\bn_\be-_\bn_\bu_\bm_\bb_\be_\br]
l\bli\bis\bst\bt _\bp_\br_\bo_\bc_\be_\bd_\bu_\br_\be/_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn
List the lines in the current source file from the
first line number to the second inclusive. If no
lines are specified, the next 10 lines are listed.
If the name of a procedure or function is given lines
_\bn-_\bk to _\bn+_\bk are listed where _\bn is the first statement
in the procedure or function and _\bk is small.
u\bus\bse\be _\bd_\bi_\br_\be_\bc_\bt_\bo_\br_\by-_\bl_\bi_\bs_\bt
Set the list of directories to be searched when
looking for source files.
C\bCo\bom\bmm\bma\ban\bnd\bd A\bAl\bli\bia\bas\bse\bes\bs a\ban\bnd\bd V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs
a\bal\bli\bia\bas\bs _\bn_\ba_\bm_\be _\bn_\ba_\bm_\be
a\bal\bli\bia\bas\bs _\bn_\ba_\bm_\be _\bs_\bt_\br_\bi_\bn_\bg
a\bal\bli\bia\bas\bs _\bn_\ba_\bm_\be (_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs) ``_\bs_\bt_\br_\bi_\bn_\bg''
When commands are processed, dbx first checks to see if the
word is an alias for either a command or a string. If it is an
alias, then dbx treats the input as though the corresponding
string (with values substituted for any parameters) had been
entered. For example, to define an alias ``rr'' for the
command ``rerun'', one can say
alias rr rerun
To define an alias called ``b'' that sets a stop at a
particular line one can say
alias b(x) ``stop at x''
Subsequently, the command ``b(12)'' will expand to ``stop at
12''.
s\bse\bet\bt _\bn_\ba_\bm_\be[_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn]
The s\bse\bet\bt command defines values for debugger variables. The
names of these variables cannot conflict with names in the pro-
gram being debugged, and are expanded to the corresponding ex-
pression within other commands. The following variables have a
special meaning:
$frame
Setting this variable to an address causes dbx to use the
stack frame pointed to by the address for doing stack
traces and accessing local variables. This facility is
of particular use for kernel debugging.
$hexchars
$hexints
$hexoffsets
$hexstrings
When set, dbx prints out out characters, integers,
offsets from registers, or character pointers respective-
ly in hexadecimal.
$listwindow
The value of this variable specifies the number of lines
to list around a function or when the l\bli\bis\bst\bt command is
given without any parameters. Its default value is 10.
$mapaddrs
Setting (unsetting) this variable causes dbx to start
(stop) mapping addresses. As with ``$frame'', this is
useful for kernel debugging.
$unsafecall
$unsafeassign
When ``$unsafecall'' is set, strict type checking is
turned off for arguments to subroutine or function calls
( _\be ._\bg. in the c\bca\bal\bll\bl statement). When ``$unsafeassign''
is set, strict type checking between the two sides of an
a\bas\bss\bsi\big\bgn\bn statement is turned off. These variables should
be used only with great care, because they severely limit
dbx's usefulness for detecting errors.
u\bun\bna\bal\bli\bia\bas\bs _\bn_\ba_\bm_\be
Remove the alias with the given name.
u\bun\bns\bse\bet\bt _\bn_\ba_\bm_\be
Delete the debugger variable associated with _\bn_\ba_\bm_\be.
M\bMa\bac\bch\bhi\bin\bne\be L\bLe\bev\bve\bel\bl C\bCo\bom\bmm\bma\ban\bnd\bds\bs
t\btr\bra\bac\bce\bei\bi [_\ba_\bd_\bd_\br_\be_\bs_\bs] [_\bc_\bo_\bn_\bd]
t\btr\bra\bac\bce\bei\bi [_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be] [a\bat\bt_\ba_\bd_\bd_\br_\be_\bs_\bs] [i\bif\bf_\bc_\bo_\bn_\bd]
s\bst\bto\bop\bpi\bi [_\ba_\bd_\bd_\br_\be_\bs_\bs] [i\bif\bf_\bc_\bo_\bn_\bd]
s\bst\bto\bop\bpi\bi [a\bat\bt] [_\ba_\bd_\bd_\br_\be_\bs_\bs] [i\bif\bf_\bc_\bo_\bn_\bd]
Turn on tracing or set a stop using a machine instruction
address.
s\bst\bte\bep\bpi\bi
n\bne\bex\bxt\bti\bi Single step as in s\bst\bte\bep\bp or n\bne\bex\bxt\bt, but do a single instruction
rather than source line.
_\ba_\bd_\bd_\br_\be_\bs_\bs,_\ba_\bd_\bd_\br_\be_\bs_\bs/[_\bm_\bo_\bd_\be]
_\ba_\bd_\bd_\br_\be_\bs_\bs/[_\bc_\bo_\bu_\bn_\bt][_\bm_\bo_\bd_\be]
Print the contents of memory starting at the first _\ba_\bd_\bd_\br_\be_\bs_\bs and
continuing up to the second _\ba_\bd_\bd_\br_\be_\bs_\bs or until _\bc_\bo_\bu_\bn_\bt items are
printed. If the address is ``.'', the address following the
one printed most recently is used. The _\bm_\bo_\bd_\be specifies how
memory is to be printed; if it is omitted the previous mode
specified is used. The initial mode is ``X''. The following
modes are supported:
i\bi print the machine instruction
d\bd print a short word in decimal
D\bD print a long word in decimal
o\bo print a short word in octal
O\bO print a long word in octal
x\bx print a short word in hexadecimal
X\bX print a long word in hexadecimal
b\bb print a byte in octal
c\bc print a byte as a character
s\bs print a string of characters terminated by a
null byte
f\bf print a single precision real number
g\bg print a double precision real number
Symbolic addresses are specified by preceding the name with an
``&''. Registers are denoted by ``$rN'' where N is the number
of the register. Addresses may be expressions made up of other
addresses and the operators ``+'', ``-'', and indirection
(unary ``*'').
M\bMi\bis\bsc\bce\bel\bll\bla\ban\bne\beo\bou\bus\bs C\bCo\bom\bmm\bma\ban\bnd\bds\bs
g\bgr\bri\bip\bpe\be Invoke a mail program to send a message to the person in charge
of d\bdb\bbx\bx.
h\bhe\bel\blp\bp Print out a synopsis of d\bdb\bbx\bx commands.
q\bqu\bui\bit\bt Exit d\bdb\bbx\bx.
s\bsh\bh _\bc_\bo_\bm_\bm_\ba_\bn_\bd-_\bl_\bi_\bn_\be
Pass the command line to the shell for execution. The SHELL
environment variable determines which shell is used.
s\bso\bou\bur\brc\bce\be _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
Read d\bdb\bbx\bx commands from the given _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be.
E\bEN\bNV\bVI\bIR\bRO\bON\bNM\bME\bEN\bNT\bT
D\bDb\bbx\bx utilizes the following environment variables:
EDITOR
HOME
PATH
SHELL
F\bFI\bIL\bLE\bES\bS
_\ba._\bo_\bu_\bt object file
._\bd_\bb_\bx_\bi_\bn_\bi_\bt initial commands
S\bSE\bEE\bE A\bAL\bLS\bSO\bO
cc(1), mod(l), f77(1), pc(1)
H\bHI\bIS\bST\bTO\bOR\bRY\bY
D\bDb\bbx\bx appeared in 4.2 BSD.
B\bBU\bUG\bGS\bS
D\bDb\bbx\bx suffers from the same ``multiple include'' malady as did s\bsd\bdb\bb. If you
have a program consisting of a number of object files and each is built
from source files that include header files, the symbolic information for
the header files is replicated in each object file. Since about one de-
bugger start-up is done for each link, having the linker ld(1) re-
organize the symbol information would not save much time, though it would
reduce some of the disk space used.
This problem is an artifact of the unrestricted semantics of #include's
in C; for example an include file can contain static declarations that
are separate entities for each file in which they are included. However,
even with Modula-2 there is a substantial amount of duplication of symbol
information necessary for inter-module type checking.
Some problems remain with the support for individual languages. Fortran
problems include: inability to assign to logical, logical*2, complex and
double complex variables; inability to represent parameter constants
which are not type integer or real; peculiar representation for the
values of dummy procedures (the value shown for a dummy procedure is ac-
tually the first few bytes of the procedure text; to find the location of
the procedure, use ``&'' to take the address of the variable).