|
|
1.1 ! root 1: DBX(1) UNIX Reference Manual DBX(1) ! 2: ! 3: NNAAMMEE ! 4: ddbbxx - debugger ! 5: ! 6: SSYYNNOOPPSSIISS ! 7: DDbbxx [--rr] [--ii] [--kk] [--II _d_i_r] [--cc _f_i_l_e] [_o_b_j_f_i_l_e [_c_o_r_e_d_u_m_p]] ! 8: ! 9: DDEESSCCRRIIPPTTIIOONN ! 10: DDbbxx is a tool for source level debugging and execution of programs under ! 11: UNIX. The _o_b_j_f_i_l_e is an object file produced by a compiler with the ap- ! 12: propriate flag (usually --gg) specified to produce symbol information in ! 13: the object file. Currently, cc(1), f77(1), pc(1), and the DEC Western ! 14: Research Laboratory Modula-2 compiler, mod(l), produce the appropriate ! 15: source information. The machine level facilities of ddbbxx can be used on ! 16: any program. ! 17: ! 18: The object file contains a symbol table that includes the names of all ! 19: the source files translated by the compiler to create it. These files ! 20: are available for perusal while using the debugger. ! 21: ! 22: If a file named _c_o_r_e exists in the current directory or a _c_o_r_e_d_u_m_p file ! 23: is specified, ddbbxx can be used to examine the state of the program when it ! 24: faulted. ! 25: ! 26: If the file ._d_b_x_i_n_i_t exists in the current directory then the debugger ! 27: commands in it are executed. DDbbxx also checks for a ._d_b_x_i_n_i_t in the ! 28: user's home directory if there isn't one in the current directory. ! 29: ! 30: The command line options and their meanings are: ! 31: ! 32: --rr Execute _o_b_j_f_i_l_e immediately. If it terminates successfully ddbbxx ! 33: exits. Otherwise the reason for termination will be reported ! 34: and the user offered the option of entering the debugger or ! 35: letting the program fault. DDbbxx will read from /_d_e_v/_t_t_y when --rr ! 36: is specified and standard input is not a terminal. ! 37: ! 38: --ii Force ddbbxx to act as though standard input is a terminal. ! 39: ! 40: --kk Map memory addresses, useful for kernel debugging. ! 41: ! 42: --II _d_i_r Add _d_i_r to the list of directories that are searched when look- ! 43: ing for a source file. Normally ddbbxx looks for source files in ! 44: the current directory and in the directory where _o_b_j_f_i_l_e is lo- ! 45: cated. The directory search path can also be set with the uussee ! 46: command. ! 47: ! 48: --cc _f_i_l_e Execute the ddbbxx commands in the _f_i_l_e before reading from stan- ! 49: dard input. ! 50: ! 51: Unless --rr is specified, ddbbxx just prompts and waits for a command. ! 52: ! 53: EExxeeccuuttiioonn aanndd TTrraacciinngg CCoommmmaannddss ! 54: ! 55: rruunn [_a_r_g_s] [<< _f_i_l_e_n_a_m_e] [>> _f_i_l_e_n_a_m_e] ! 56: rreerruunn [_a_r_g_s] [<< _f_i_l_e_n_a_m_e] [>> _f_i_l_e_n_a_m_e] ! 57: Start executing _o_b_j_f_i_l_e, passing _a_r_g_s as command line argu- ! 58: ments; << or >> can be used to redirect input or output in the ! 59: usual manner. When rreerruunn is used without any arguments the ! 60: previous argument list is passed to the program; otherwise it ! 61: is identical to rruunn. If _o_b_j_f_i_l_e has been written since the ! 62: last time the symbolic information was read in, ddbbxx will read ! 63: in the new information. ! 64: ttrraaccee [iinn _p_r_o_c_e_d_u_r_e/_f_u_n_c_t_i_o_n] [iiff _c_o_n_d_i_t_i_o_n] ! 65: ttrraaccee _s_o_u_r_c_e-_l_i_n_e-_n_u_m_b_e_r [iiff _c_o_n_d_i_t_i_o_n] ! 66: ttrraaccee _p_r_o_c_e_d_u_r_e/_f_u_n_c_t_i_o_n [iinn _p_r_o_c_e_d_u_r_e/_f_u_n_c_t_i_o_n] [iiff _c_o_n_d_i_t_i_o_n] ! 67: ttrraaccee _e_x_p_r_e_s_s_i_o_n aatt _s_o_u_r_c_e-_l_i_n_e-_n_u_m_b_e_r [iiff _c_o_n_d_i_t_i_o_n] ! 68: ttrraaccee _v_a_r_i_a_b_l_e [iinn _p_r_o_c_e_d_u_r_e/_f_u_n_c_t_i_o_n] [iiff _c_o_n_d_i_t_i_o_n] ! 69: Have tracing information printed when the program is executed. ! 70: A number is associated with the command that is used to turn ! 71: the tracing off (see the ddeelleettee command). ! 72: ! 73: The first argument describes what is to be traced. If it is a ! 74: _s_o_u_r_c_e-_l_i_n_e-_n_u_m_b_e_r, then the line is printed immediately prior ! 75: to being executed. Source line numbers in a file other than ! 76: the current one must be preceded by the name of the file in ! 77: quotes and a colon, e.g. "mumble.p":17. ! 78: ! 79: If the argument is a procedure or function name then every time ! 80: it is called, information is printed telling what routine ! 81: called it, from what source line it was called, and what param- ! 82: eters were passed to it. In addition, its return is noted, and ! 83: if it's a function then the value it is returning is also ! 84: printed. ! 85: ! 86: If the argument is an _e_x_p_r_e_s_s_i_o_n with an aatt clause then the ! 87: value of the expression is printed whenever the identified ! 88: source line is reached. ! 89: ! 90: If the argument is a variable then the name and value of the ! 91: variable is printed whenever it changes. Execution is substan- ! 92: tially slower during this form of tracing. ! 93: ! 94: If no argument is specified then all source lines are printed ! 95: before they are executed. Execution is substantially slower ! 96: during this form of tracing. ! 97: ! 98: The clause iinn _p_r_o_c_e_d_u_r_e/_f_u_n_c_t_i_o_n restricts tracing information ! 99: to be printed only while executing inside the given procedure ! 100: or function. ! 101: ! 102: _C_o_n_d_i_t_i_o_n is a boolean expression and is evaluated prior to ! 103: printing the tracing information; if it is false then the in- ! 104: formation is not printed. ! 105: ssttoopp iiff _c_o_n_d_i_t_i_o_n ! 106: ssttoopp aatt _s_o_u_r_c_e-_l_i_n_e-_n_u_m_b_e_r [iiff _c_o_n_d_i_t_i_o_n] ! 107: ssttoopp iinn _s_o_u_r_c_e-_l_i_n_e-_n_u_m_b_e_r [iiff _c_o_n_d_i_t_i_o_n] ! 108: ssttoopp _v_a_r_i_a_b_l_e [iiff _c_o_n_d_i_t_i_o_n] ! 109: Stop execution when the given line is reached, procedure or ! 110: function called, variable changed, or condition true. ! 111: ssttaattuuss [>> _f_i_l_e_n_a_m_e] ! 112: Print out the currently active ttrraaccee and ssttoopp commands. ! 113: ddeelleettee _c_o_m_m_a_n_d-_n_u_m_b_e_r ... ! 114: The traces or stops corresponding to the given numbers are ! 115: removed. The numbers associated with traces and stops are ! 116: printed by the ssttaattuuss command. ! 117: ccaattcchh _n_u_m_b_e_r ! 118: ccaattcchh _s_i_g_n_a_l-_n_a_m_e ! 119: iiggnnoorree _n_u_m_b_e_r ! 120: iiggnnoorree _s_i_g_n_a_l-_n_a_m_e ! 121: Start or stop trapping a signal before it is sent to the ! 122: program. This is useful when a program being debugged handles ! 123: signals such as interrupts. A signal may be specified by ! 124: number or by a name (e.g., SIGINT). Signal names are case ! 125: insensitive and the ``SIG'' prefix is optional. By default all ! 126: signals are trapped except SIGCONT, SIGCHILD, SIGALRM and ! 127: SIGKILL. ! 128: ccoonntt _i_n_t_e_g_e_r ! 129: ccoonntt _s_i_g_n_a_l-_n_a_m_e ! 130: Continue execution from where it stopped. If a signal is ! 131: specified, the process continues as though it received the ! 132: signal. Otherwise, the process is continued as though it had ! 133: not been stopped. ! 134: Execution cannot be continued if the process has ``finished'', ! 135: that is, called the standard procedure ``exit''. DDbbxx does not ! 136: allow the process to exit, thereby letting the user to examine ! 137: the program state. ! 138: sstteepp Execute one source line. ! 139: nneexxtt Execute up to the next source line. The difference between ! 140: this and sstteepp is that if the line contains a call to a pro- ! 141: cedure or function the sstteepp command will stop at the beginning ! 142: of that block, while the nneexxtt command will not. ! 143: rreettuurrnn [_p_r_o_c_e_d_u_r_e] ! 144: Continue until a return to _p_r_o_c_e_d_u_r_e is executed, or until the ! 145: current procedure returns if none is specified. ! 146: ccaallll _p_r_o_c_e_d_u_r_e (_p_a_r_a_m_e_t_e_r_s) ! 147: Execute the object code associated with the named procedure or ! 148: function. ! 149: ! 150: ! 151: PPrriinnttiinngg VVaarriiaabblleess aanndd EExxpprreessssiioonnss ! 152: Names are resolved first using the static scope of the current function, ! 153: then using the dynamic scope if the name is not defined in the static ! 154: scope. If static and dynamic searches do not yield a result, an ! 155: arbitrary symbol is chosen and the message ``[using Ar qualified name]'' ! 156: is printed. The name resolution procedure may be overridden by qualify- ! 157: ing an identifier with a block name, e.g., ``module.variable'' For C, ! 158: source files are treated as modules named by the file name without ! 159: ``.c''. ! 160: ! 161: Expressions are specified with an approximately common subset of C and ! 162: Pascal (or equivalently Modula-2) syntax. Indirection can be denoted us- ! 163: ing either a prefix ``*'' or a postfix ``^'' and array expressions are ! 164: subscripted by brackets (``[]''). The field reference operator (``.'') ! 165: can be used with pointers as well as records, making the C operator ! 166: ``->'' unnecessary (although it is supported). ! 167: ! 168: Types of expressions are checked; the type of an expression may be ! 169: overridden by using ``_t_y_p_e-_n_a_m_e (_e_x_p_r_e_s_s_i_o_n)''. When there is no ! 170: corresponding named type the special constructs ``&_t_y_p_e-_n_a_m_e'' and ! 171: ``$$_t_a_g-_n_a_m_e'' can be used to represent a pointer to a named type or C ! 172: structure tag. ! 173: ! 174: aassssiiggnn _v_a_r_i_a_b_l_e==_e_x_p_r_e_s_s_i_o_n ! 175: Assign the value of the expression to the variable. ! 176: dduummpp [_p_r_o_c_e_d_u_r_e] [>> _f_i_l_e_n_a_m_e] ! 177: Print the names and values of variables in the given procedure, ! 178: or the current one if none is specified. If the procedure ! 179: given is ``.'', then the all active variables are dumped. ! 180: pprriinntt _e_x_p_r_e_s_s_i_o_n [,, _e_x_p_r_e_s_s_i_o_n ...] ! 181: Print out the values of the expressions. ! 182: wwhhaattiiss _n_a_m_e ! 183: Print the declaration of the given name, which may be qualified ! 184: with block names as above. ! 185: wwhhiicchh _i_d_e_n_t_i_f_i_e_r ! 186: Print the full qualification of the given identifer, i.e. the ! 187: outer blocks that the identifier is associated with. ! 188: uupp [_c_o_u_n_t] ! 189: ddoowwnn [_c_o_u_n_t] ! 190: Move the current function, which is used for resolving names, ! 191: up or down the stack _c_o_u_n_t levels. The default _c_o_u_n_t is 1. ! 192: wwhheerree Print out a list of the active procedures and function. ! 193: wwhheerreeiiss _i_d_e_n_t_i_f_i_e_r ! 194: Print the full qualification of all the symbols whose name ! 195: matches the given identifier. The order in which the symbols ! 196: are printed is not meaningful. ! 197: ! 198: ! 199: AAcccceessssiinngg SSoouurrccee FFiilleess ! 200: ! 201: /_r_e_g_u_l_a_r _e_x_p_r_e_s_s_i_o_n[/] ! 202: ?_r_e_g_u_l_a_r _e_x_p_r_e_s_s_i_o_n[?] ! 203: Search forward or backward in the current source file ! 204: for the given pattern. ! 205: eeddiitt [_f_i_l_e_n_a_m_e] ! 206: eeddiitt _p_r_o_c_e_d_u_r_e/_f_u_n_c_t_i_o_n-_n_a_m_e ! 207: Invoke an editor on _f_i_l_e_n_a_m_e or the current source ! 208: file if none is specified. If a _p_r_o_c_e_d_u_r_e or ! 209: _f_u_n_c_t_i_o_n name is specified, the editor is invoked on ! 210: the file that contains it. Which editor is invoked ! 211: by default depends on the installation. The default ! 212: can be overridden by setting the environment variable ! 213: EDITOR to the name of the desired editor. ! 214: ffiillee [_f_i_l_e_n_a_m_e] Change the current source file name to _f_i_l_e_n_a_m_e. If ! 215: none is specified then the current source file name ! 216: is printed. ! 217: ffuunncc [_p_r_o_c_e_d_u_r_e/_f_u_n_c_t_i_o_n] ! 218: Change the current function. If none is specified ! 219: then print the current function. Changing the ! 220: current function implicitly changes the current ! 221: source file to the one that contains the function; it ! 222: also changes the current scope used for name ! 223: resolution. ! 224: lliisstt [_s_o_u_r_c_e-_l_i_n_e-_n_u_m_b_e_r [,,_s_o_u_r_c_e-_l_i_n_e-_n_u_m_b_e_r] ! 225: lliisstt _p_r_o_c_e_d_u_r_e/_f_u_n_c_t_i_o_n ! 226: List the lines in the current source file from the ! 227: first line number to the second inclusive. If no ! 228: lines are specified, the next 10 lines are listed. ! 229: If the name of a procedure or function is given lines ! 230: _n-_k to _n+_k are listed where _n is the first statement ! 231: in the procedure or function and _k is small. ! 232: uussee _d_i_r_e_c_t_o_r_y-_l_i_s_t ! 233: Set the list of directories to be searched when ! 234: looking for source files. ! 235: ! 236: ! 237: CCoommmmaanndd AAlliiaasseess aanndd VVaarriiaabblleess ! 238: ! 239: aalliiaass _n_a_m_e _n_a_m_e ! 240: aalliiaass _n_a_m_e _s_t_r_i_n_g ! 241: aalliiaass _n_a_m_e (_p_a_r_a_m_e_t_e_r_s) ``_s_t_r_i_n_g'' ! 242: When commands are processed, dbx first checks to see if the ! 243: word is an alias for either a command or a string. If it is an ! 244: alias, then dbx treats the input as though the corresponding ! 245: string (with values substituted for any parameters) had been ! 246: entered. For example, to define an alias ``rr'' for the ! 247: command ``rerun'', one can say ! 248: ! 249: alias rr rerun ! 250: ! 251: To define an alias called ``b'' that sets a stop at a ! 252: particular line one can say ! 253: ! 254: alias b(x) ``stop at x'' ! 255: ! 256: Subsequently, the command ``b(12)'' will expand to ``stop at ! 257: 12''. ! 258: ! 259: sseett _n_a_m_e[_e_x_p_r_e_s_s_i_o_n] ! 260: The sseett command defines values for debugger variables. The ! 261: names of these variables cannot conflict with names in the pro- ! 262: gram being debugged, and are expanded to the corresponding ex- ! 263: pression within other commands. The following variables have a ! 264: special meaning: ! 265: ! 266: $frame ! 267: Setting this variable to an address causes dbx to use the ! 268: stack frame pointed to by the address for doing stack ! 269: traces and accessing local variables. This facility is ! 270: of particular use for kernel debugging. ! 271: $hexchars ! 272: $hexints ! 273: $hexoffsets ! 274: $hexstrings ! 275: When set, dbx prints out out characters, integers, ! 276: offsets from registers, or character pointers respective- ! 277: ly in hexadecimal. ! 278: $listwindow ! 279: The value of this variable specifies the number of lines ! 280: to list around a function or when the lliisstt command is ! 281: given without any parameters. Its default value is 10. ! 282: $mapaddrs ! 283: Setting (unsetting) this variable causes dbx to start ! 284: (stop) mapping addresses. As with ``$frame'', this is ! 285: useful for kernel debugging. ! 286: $unsafecall ! 287: $unsafeassign ! 288: When ``$unsafecall'' is set, strict type checking is ! 289: turned off for arguments to subroutine or function calls ! 290: ( _e ._g. in the ccaallll statement). When ``$unsafeassign'' ! 291: is set, strict type checking between the two sides of an ! 292: aassssiiggnn statement is turned off. These variables should ! 293: be used only with great care, because they severely limit ! 294: dbx's usefulness for detecting errors. ! 295: ! 296: uunnaalliiaass _n_a_m_e ! 297: Remove the alias with the given name. ! 298: uunnsseett _n_a_m_e ! 299: Delete the debugger variable associated with _n_a_m_e. ! 300: ! 301: ! 302: MMaacchhiinnee LLeevveell CCoommmmaannddss ! 303: ! 304: ttrraacceeii [_a_d_d_r_e_s_s] [_c_o_n_d] ! 305: ttrraacceeii [_v_a_r_i_a_b_l_e] [aatt_a_d_d_r_e_s_s] [iiff_c_o_n_d] ! 306: ssttooppii [_a_d_d_r_e_s_s] [iiff_c_o_n_d] ! 307: ssttooppii [aatt] [_a_d_d_r_e_s_s] [iiff_c_o_n_d] ! 308: Turn on tracing or set a stop using a machine instruction ! 309: address. ! 310: sstteeppii ! 311: nneexxttii Single step as in sstteepp or nneexxtt, but do a single instruction ! 312: rather than source line. ! 313: _a_d_d_r_e_s_s,_a_d_d_r_e_s_s/[_m_o_d_e] ! 314: _a_d_d_r_e_s_s/[_c_o_u_n_t][_m_o_d_e] ! 315: Print the contents of memory starting at the first _a_d_d_r_e_s_s and ! 316: continuing up to the second _a_d_d_r_e_s_s or until _c_o_u_n_t items are ! 317: printed. If the address is ``.'', the address following the ! 318: one printed most recently is used. The _m_o_d_e specifies how ! 319: memory is to be printed; if it is omitted the previous mode ! 320: specified is used. The initial mode is ``X''. The following ! 321: modes are supported: ! 322: ! 323: ii print the machine instruction ! 324: dd print a short word in decimal ! 325: DD print a long word in decimal ! 326: oo print a short word in octal ! 327: OO print a long word in octal ! 328: xx print a short word in hexadecimal ! 329: XX print a long word in hexadecimal ! 330: bb print a byte in octal ! 331: cc print a byte as a character ! 332: ss print a string of characters terminated by a ! 333: null byte ! 334: ff print a single precision real number ! 335: gg print a double precision real number ! 336: ! 337: ! 338: Symbolic addresses are specified by preceding the name with an ! 339: ``&''. Registers are denoted by ``$rN'' where N is the number ! 340: of the register. Addresses may be expressions made up of other ! 341: addresses and the operators ``+'', ``-'', and indirection ! 342: (unary ``*''). ! 343: ! 344: ! 345: MMiisscceellllaanneeoouuss CCoommmmaannddss ! 346: ! 347: ggrriippee Invoke a mail program to send a message to the person in charge ! 348: of ddbbxx. ! 349: ! 350: hheellpp Print out a synopsis of ddbbxx commands. ! 351: ! 352: qquuiitt Exit ddbbxx. ! 353: ! 354: sshh _c_o_m_m_a_n_d-_l_i_n_e ! 355: Pass the command line to the shell for execution. The SHELL ! 356: environment variable determines which shell is used. ! 357: ! 358: ssoouurrccee _f_i_l_e_n_a_m_e ! 359: Read ddbbxx commands from the given _f_i_l_e_n_a_m_e. ! 360: ! 361: EENNVVIIRROONNMMEENNTT ! 362: DDbbxx utilizes the following environment variables: ! 363: EDITOR ! 364: HOME ! 365: PATH ! 366: SHELL ! 367: ! 368: FFIILLEESS ! 369: _a._o_u_t object file ! 370: ._d_b_x_i_n_i_t initial commands ! 371: ! 372: ! 373: SSEEEE AALLSSOO ! 374: cc(1), mod(l), f77(1), pc(1) ! 375: ! 376: HHIISSTTOORRYY ! 377: DDbbxx appeared in 4.2 BSD. ! 378: ! 379: BBUUGGSS ! 380: DDbbxx suffers from the same ``multiple include'' malady as did ssddbb. If you ! 381: have a program consisting of a number of object files and each is built ! 382: from source files that include header files, the symbolic information for ! 383: the header files is replicated in each object file. Since about one de- ! 384: bugger start-up is done for each link, having the linker ld(1) re- ! 385: organize the symbol information would not save much time, though it would ! 386: reduce some of the disk space used. ! 387: ! 388: This problem is an artifact of the unrestricted semantics of #include's ! 389: in C; for example an include file can contain static declarations that ! 390: are separate entities for each file in which they are included. However, ! 391: even with Modula-2 there is a substantial amount of duplication of symbol ! 392: information necessary for inter-module type checking. ! 393: ! 394: Some problems remain with the support for individual languages. Fortran ! 395: problems include: inability to assign to logical, logical*2, complex and ! 396: double complex variables; inability to represent parameter constants ! 397: which are not type integer or real; peculiar representation for the ! 398: values of dummy procedures (the value shown for a dummy procedure is ac- ! 399: tually the first few bytes of the procedure text; to find the location of ! 400: the procedure, use ``&'' to take the address of the variable).
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.