DBX(1) COMMAND REFERENCE DBX(1) NAME dbx - debugger SYNOPSIS dbx [ -r ] [ -i ] [ -k ] [ -I dir ] [ -c file ] [ -t { xterm | tterm } ] [ -X ] [ -x ] [ objfile [ coredump [ kernel ] ]] DESCRIPTION The dbx debugger is a tool for source-level debugging and execution of programs under UNIXr. The objfile is an object file produced by a compiler with the appropriate flag (-g) specified to produce symbol information in the object file. Currently, cc(1), f77(1), and pc(1) produce the appropriate source information. The machine level facilities of dbx can be used on any program. The object file contains a symbol table that includes the name of all source files translated by the compiler to create it. These files are available for perusal while using the debugger. If a file named core exists in the current directory or a coredump file is specified, dbx can be used to examine the state of the program when it faulted. If a coredump file is specified, then a kernel file may also be specified. (This would only be needed if the coredump file was produced under a different release of VMUNIXr other than the one currently running.) If the file .dbxinit exists in the current directory then the debugger commands in it are executed. The dbx debugger also checks for a .dbxinit file in the user's home directory if there isn't one in the current directory. The command line options and their meanings are listed here. -r Execute objfile immediately; if it terminates successfully dbx exits. Otherwise the reason for termination will be reported and the user is offered the option of entering the debugger or letting the program fault. The debugger reads from /dev/tty when -r is specified and standard input is not a terminal. -i Force dbx to act as though standard input is a terminal. -k Map memory addresses; useful for kernel debugging. Printed 5/19/88 1
DBX(1) COMMAND REFERENCE DBX(1) -I dir Add dir to the list of directories that are searched when looking for a source file. Normally, dbx looks for source files in the current directory and in the directory where objfile is located. The directory search path can also be set with the use command as described later in this manual page. -c file Execute dbx commands in the file before reading from standard input. -t { xterm | tterm } Used with -X to attach a subprocess to its own xterm or tterm window. For more information, refer to xdb(1). -X Use an experimental X window user interface. For more information, refer to xdb(1). -x Use an experimental X window user interface. For more information, refer to xdb(1). Unless -r is specified, dbx prompts and waits for a command. Execution and Tracing Commands run [args] [< filename] [> filename] rerun [args] [< filename] [> filename] Start executing objfile, passing args as command line arguments; < or > can be used to redirect input or output in the usual manner. When rerun is used without any arguments the previous argument list is passed to the program; otherwise it is identical to run. If objfile has been written since the last time the symbolic information was read in, dbx reads in the new information. trace [in procedure/function] [if condition] trace source-line-number [if condition] trace procedure/function [in procedure/function] [if condition] trace expression at source-line-number [if condition] trace variable [in procedure/function] [if condition] 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 delete command in this manual reference page). Printed 5/19/88 2
DBX(1) COMMAND REFERENCE DBX(1) The first argument describes what is to be traced; if it is a source-line-number, 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 every time it is called information is printed telling what routine called it, from what source line it was called, and what parameters were passed to it. In addition, its return is noted, and if it's a function the value it is returning is also printed. If the argument is an expression with an at clause 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 substantially 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 in procedure/function restricts tracing information to be printed only while executing inside the given procedure or function. Condition is a boolean expression and is evaluated prior to printing the tracing information; if it is false then the information is not printed. stop if condition stop at source-line-number [if condition] stop in procedure/function [if condition] stop variable [if condition] Stop execution when the given line is reached, procedure or function is called, variable is changed, or condition true. status [> filename] Print out the currently active trace and stop commands. delete command-number ... The traces or stops corresponding to the given numbers are removed. The numbers associated with traces and stops are printed by the status command. catch number Printed 5/19/88 3
DBX(1) COMMAND REFERENCE DBX(1) catch signal-name ignore number ignore signal-name 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 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. cont integer cont signal-name 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, if the process has called the standard procedure ``exit''. The dbx program does not allow the process to exit, thereby letting the user examine the program state. step Execute one source line. next Execute up to the next source line. The difference between this and step is that if the line contains a call to a procedure or function the step command will stop at the beginning of that block, while the next command will not. return [procedure] Continue until a return to procedure is executed, or until the current procedure returns if none is specified. call procedure(parameters) Execute the object code associated with the named procedure or function. Printing Variables and Expressions 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 qualified name]'' is Printed 5/19/88 4
DBX(1) COMMAND REFERENCE DBX(1) printed. The name resolution procedure may be overridden by qualifying an identifier with a block name, e.g., ``module.variable''. For C, source files are treated as modules named by the file name without the .c extension. Expressions are specified with an approximately common subset of C and Pascal (or equivalently, Modula-2) syntax. Indirection can be denoted using either a prefix (*) or a postfix (^), and array expressions are subscripted by brackets ([ ]). The field reference operator dot (.) 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 type-name(expression). When there is no corresponding named type the special constructs &type-name and $$tag-name can be used to represent a pointer to a named type or C structure tag. assign variable = expression Assign the value of the expression to the variable. dump [procedure] [> filename] Print the names and values of variables in the given procedure, or the current procedure if none is specified. If the procedure given is dot (.), then all active variables are dumped. print expression [, expression ...] Print the values of the expressions. whatis name Print the declaration of the given name, which may be qualified with block names as previously described. which identifier Print the full qualification of the given identifier, i.e. the outer blocks with which the identifier is associated. up [count] down [count] Move the current function, which is used for resolving names, up or down the stack count levels. The default count is 1. whatsat expression Take the value of the expression to be an address and print it in symbolic form. Printed 5/19/88 5
DBX(1) COMMAND REFERENCE DBX(1) where Print a list of the active procedures and function. whereis identifier Print the full qualification of all symbols whose name matches the given identifier; the order in which the symbols are printed is not meaningful. Accessing Source Files /regular expression[/] ?regular expression[?] Search forward or backward in the current source file for the given pattern. edit [filename] edit procedure/function-name Invoke an editor on filename or the current source file if none is specified. If a procedure or function 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. file [filename] Change the current source file name to filename; if none is specified the current source file name is printed. func [procedure/function] Change the current function; if none is specified 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. list [source-line-number [, source-line-number]] list procedure/function List the lines in the current source file from the first line number to the second inclusive line number; if no lines are specified, the next 10 lines are listed. If the name of a procedure or function is given, lines n-k to n+k are listed where n is the first statement in the procedure or function and k is small. Printed 5/19/88 6
DBX(1) COMMAND REFERENCE DBX(1) use directory-list Set the list of directories searched when looking for source files. Command Aliases and Variables alias name name alias name ``string'' alias name (parameters) ``string'' 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, 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, type: alias rr rerun To define an alias called b that sets a stop at a particular line, type: alias b(x) ``stop at x'' Subsequently, the command b(12) expands to stop at 12. There are a number of default aliases. Aliases can be displayed by typing alias without any parameters. set name [= expression] The set command defines values for debugger variables; the names of these variables cannot conflict with names in the program being debugged, and are expanded to the corresponding expression within other commands. The following variables have a special meaning: $frame Setting this variable to an address, dbx uses 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 characters, integers, offsets from registers, or character pointers (respectively) in hexadecimal. $listwindow The value of this variable specifies the number of lines listed around a function or when the list command is given without Printed 5/19/88 7
DBX(1) COMMAND REFERENCE DBX(1) any parameters. Its default value is 10. $mapaddrs Setting (unsetting) this variable causes dbx to start (stop) mapping addresses. As with $frame, this command is useful for kernel debugging. $unsafecall $unsafeassign When $unsafecall is set, strict type checking is turned off for arguments to subroutine or function calls (e.g. in the call statement). When $unsafeassign is set, strict type checking between the two sides of an assign statement is turned off. These variables should be used with great care because they severely limit dbx's usefulness for detecting errors. $repeat_step When $repeatstep is set, a carriage return entered on an otherwise blank line will repeat the last command if this was a step, stepi, next, or nexti. $repeat_examine When $repeatexamine is set, a carriage return entered on an otherwise blank line will repeat the last command if this was an examine command. The starting address of the repeated command is set to one past the last address displayed by the previous command. $clobber When $clobber is set, a command with redirected output will overwrite the output file. $octin $decin $hexin $hexwhenleadingzero These variables control the interpretation of numbers given as input to dbx. Numbers beginning with 0x, 0t, and 0o are taken as hex, decimal, and octal, respectively. A number with a leading zero will be taken as hex if a $hexin or $hexwhenleadingzero is set, decimal when $decin is set and as an octal otherwise. Numbers without a Printed 5/19/88 8
DBX(1) COMMAND REFERENCE DBX(1) leading zero are taken as hex if $hexin is set, octal if $octin is set, and decimal otherwise. unalias name Remove the alias with the given name. unset name Delete the debugger variable associated with name. Machine Level Commands listi Same as list with the addition of printing the disassembled code for each source line printed. tracei [address] [if cond] tracei [variable] [at address] [if cond] stopi [address] [if cond] stopi [at] [address] [if cond] Turn on tracing or set a stop using a machine instruction address. stepi nexti Single step as in step or next, but do a single instruction rather than source line. address ,address/ [mode] address / [count] [mode] Print the contents of memory starting at the first address and continuing up to the second address or until count items are printed. If the address is dot (.) the address following the one printed most recently is used. The mode 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 print the machine instruction d print a short word in decimal D print a long word in decimal o print a short word in octal O print a long word in octal x print a short word in hexadecimal X print a long word in hexadecimal b print a byte in octal c print a byte as a character s print a string of characters terminated by a null byte f print a single precision real number g print a double precision real number Printed 5/19/88 9
DBX(1) COMMAND REFERENCE DBX(1) Symbolic addresses are specified by preceding the name with an ampersand (&). 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 plus (+), minus (-), and indirection (unary *). Miscellaneous Commands gripe Invoke a mail program to send a message to the person in charge of dbx. help Print out a synopsis of dbx commands. quit Exit dbx. sh command-line Pass the command line to the shell for execution. The SHELL environment variable determines which shell is used. source filename Read dbx commands from the given filename. FILES a.out object file .dbxinit initial commands VARIABLES EDITOR The editor to use when the edit command is issued. SHELL The shell to use when the sh command is issued. HOME The user's home directory; used to find dbxinit. The dbx program suffers from the same ``multiple include'' malady as did sdb(1). 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 debugger start-up is done for each link, having the linker (ld) reorganize the symbol information would not save much time, though it would reduce some of the disk space used. CAVEATS This problem is an artifact of the unrestricted semantics of #include's in C; for example, an include file can contain Printed 5/19/88 10
DBX(1) COMMAND REFERENCE DBX(1) 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, and peculiar representation for the values of dummy procedures (the value shown for a dummy procedure is actually the first few bytes of the procedure text; to find the location of the procedure, use the & sign to take the address of the variable). If objfile has been written since the last time symbolic information was read in, dbx is supposed to read in the new information, however it does not do this. Recursive function invocation can confuse the where and return commands. Calling functions from dbx does not always work. SEE ALSO cc(1), f77(1), pc(1), and xdb(1). Printed 5/19/88 11
%%index%% na:216,66; sy:282,508; de:790,2563;3641,4047;7976,3496;11760,3266;15314,2871;18473,3020;21781,3136;25205,3910;29403,3505;33196,1370; fi:34566,149; va:34715,1140; ca:35855,223;36366,1385; se:37751,172; %%index%%000000000234