|
|
1.1 ! root 1: .\" Copyright (c) 1980, 1990 The Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)adb.1 5.9 (Berkeley) 7/24/90 ! 6: .\" ! 7: .Dd July 24, 1990 ! 8: .Dt ADB 1 ! 9: .Os BSD 4 ! 10: .Sh NAME ! 11: .Nm adb ! 12: .Nd debugger ! 13: .Sh SYNOPSIS ! 14: .Nm adb ! 15: .Op Fl w ! 16: .Op Fl k ! 17: .Oo ! 18: .Op Fl I Ar dir ! 19: .Oo ! 20: .Op Ar objfil Op Ar corfil ! 21: .Sh DESCRIPTION ! 22: .Nm Adb ! 23: is a general purpose debugging program. ! 24: It may be used to examine files and to provide ! 25: a controlled environment for the execution of UNIX programs. ! 26: .Pp ! 27: .Ar Objfil ! 28: is normally an executable program file, preferably ! 29: containing a symbol table; if not then the symbolic features of ! 30: .Nm adb ! 31: cannot be used although the file can still be examined. ! 32: The default for ! 33: .Ar objfil ! 34: is ! 35: .Pa a.out . ! 36: .Ar Corfil ! 37: is assumed to be a core image file produced after executing ! 38: .Ar objfil ; ! 39: the default for ! 40: .Ar corfil ! 41: is ! 42: .Pa core ! 43: .Pp ! 44: Requests to ! 45: .Nm adb ! 46: are read from the standard input and responses are to the standard output. ! 47: If the ! 48: .Fl w ! 49: flag is present then both ! 50: .Ar objfil ! 51: and ! 52: .Ar corfil ! 53: are created if necessary and opened for reading and writing ! 54: so that files can be modified using ! 55: .Nm adb . ! 56: .Pp ! 57: The ! 58: .Fl k ! 59: option makes ! 60: .Nm adb ! 61: do UNIX kernel memory ! 62: mapping; it should be used when ! 63: .Pa core ! 64: is a UNIX crash dump ! 65: or ! 66: .Pa /dev/mem . ! 67: .Pp ! 68: The ! 69: .Fl I ! 70: option specifies a directory where files to be read ! 71: with ! 72: .Ic $< ! 73: or ! 74: .Ic $<< ! 75: (see below) will be sought; the default is ! 76: .Pa /usr/lib/adb . ! 77: .Pp ! 78: .Nm Adb ! 79: ignores ! 80: .Li QUIT ; ! 81: .Li INTERRUPT ! 82: causes return to the next ! 83: .Nm adb ! 84: command. ! 85: .Pp ! 86: In general requests to ! 87: .Nm adb ! 88: are of the form ! 89: .Pp ! 90: .ti +\n(Dsu ! 91: .Op Ad address ! 92: .Op \&, Va count ! 93: .Op Ic command ! 94: .Op \&; ! 95: .Pp ! 96: If ! 97: .Ad address ! 98: is present then ! 99: .Ad dot ! 100: is set to ! 101: .Ad address . ! 102: Initially ! 103: .Ad dot ! 104: is set to 0. For most commands ! 105: .Va count ! 106: specifies how many times the command will be executed. The default ! 107: .Va count ! 108: is 1. ! 109: .Ad Address ! 110: and ! 111: .Va count ! 112: are expressions. ! 113: .Pp ! 114: The interpretation of an address depends on the context it is used in. ! 115: If a subprocess is being debugged then addresses are interpreted ! 116: in the usual way in the address space of the subprocess. ! 117: If the operating system is being debugged either post-mortem or using ! 118: the special file ! 119: .Pa /dev/mem ! 120: to interactively examine and/or modify memory, the maps are set to map ! 121: the kernel virtual addresses which start at ! 122: .Li \&0x80000000 ! 123: (on the VAX); see ADDRESSES below. ! 124: .Sh EXPRESSIONS ! 125: .Tw Li ! 126: .Tp Sy \&\. ! 127: The value of ! 128: .Ad dot . ! 129: .Tp Sy \&\+ ! 130: The value of ! 131: .Ad dot ! 132: incremented by the current increment. ! 133: .Tp Sy \&^ ! 134: The value of ! 135: .Ad dot ! 136: decremented by the current increment. ! 137: .Tp Sy \&" ! 138: The last ! 139: .Ad address ! 140: typed. ! 141: .Tp Va integer ! 142: A number. The prefixes ! 143: .Li \&0o ! 144: and ! 145: .Li \&0O ! 146: (\*(lqzero oh\*(rq) ! 147: force interpretation ! 148: in octal radix; the prefixes ! 149: .Li 0t ! 150: and ! 151: .Li 0T ! 152: force interpretation in ! 153: decimal radix; the prefixes ! 154: .Li 0x ! 155: and ! 156: .Li 0X ! 157: force interpretation in ! 158: hexadecimal radix. Thus ! 159: .Li 0o20 ! 160: = ! 161: .Li 0t16 ! 162: = ! 163: .Li 0x10 ! 164: = sixteen. ! 165: If no prefix appears, then the ! 166: .Em default radix ! 167: is used; see the ! 168: .Ic $d ! 169: command. The default radix is initially hexadecimal. ! 170: The hexadecimal digits are ! 171: .Li 0123456789abcdefABCDEF ! 172: with the obvious ! 173: values. Note that a hexadecimal number whose most significant ! 174: digit would otherwise be an alphabetic character must have a ! 175: .Li 0x ! 176: (or ! 177: .Li 0X ) ! 178: prefix (or a leading zero if the default radix is hexadecimal). ! 179: .Tp Va integer.fraction ! 180: A 32 bit floating point number. ! 181: .Tp Li \'cccc\' ! 182: The ASCII value of up to 4 characters. ! 183: .Li \e ! 184: may be used to escape a ! 185: .Li \' . ! 186: .Tp Va < name ! 187: The value of ! 188: .Va name , ! 189: which is either a variable name or a register name. ! 190: .Nm Adb ! 191: maintains a number of variables (see ! 192: VARIABLES below) ! 193: named by single letters or digits. ! 194: If ! 195: .Va name ! 196: is a register name then the value of the register is obtained from ! 197: the system header in ! 198: .Ar corfil . ! 199: The register names are those printed by the ! 200: .Ic $r ! 201: command. ! 202: .Tp Va symbol ! 203: A ! 204: .Va symbol ! 205: is a sequence of upper or lower case letters, underscores or ! 206: digits, not starting with a digit. The backslash character ! 207: .Li \e ! 208: may be used to escape other characters. The value of the ! 209: .Va symbol ! 210: is taken from the symbol table in ! 211: .Ar objfil . ! 212: An initial ! 213: .Li \_ ! 214: will be prepended to ! 215: .Va symbol ! 216: if needed. ! 217: .Tp Va _symbol ! 218: In C, the `true name' of an external symbol begins with ! 219: .Li \_ . ! 220: It may be necessary to utter this name to distinguish it ! 221: from internal or hidden variables of a program. ! 222: .Tp Va routine.name ! 223: The address of the variable ! 224: .Va name ! 225: in the specified C routine. Both ! 226: .Va routine ! 227: and ! 228: .Va name ! 229: are ! 230: .Va symbols . ! 231: If ! 232: .Va routine ! 233: is omitted, the currently active frame is used. ! 234: (This form is currently broken; local variables can be examined ! 235: only with ! 236: .Xr dbx 1 ) . ! 237: If ! 238: .Va name ! 239: is omitted the value is the address ! 240: of the most recently activated C stack frame ! 241: corresponding to ! 242: .Va routine ! 243: (this much works). ! 244: .Tp (exp) ! 245: .\" .Tp Cx \&(\& ! 246: .\" .Va exp ! 247: .\" .Cx \&)\& ! 248: The value of the expression ! 249: .Va exp . ! 250: .Tp ! 251: .Pp ! 252: .Ss Monadic Operators ! 253: .Pp ! 254: .Dp Cx Li \&* ! 255: .Va exp ! 256: .Cx ! 257: The contents of the location addressed by ! 258: .Va exp ! 259: in ! 260: .Ar corfil . ! 261: .Dp Cx Li \&@ ! 262: .Va exp ! 263: .Cx ! 264: The contents of the location addressed by ! 265: .Va exp ! 266: in ! 267: .Ar objfil . ! 268: .Dp Cx Li \&\- ! 269: .Va exp ! 270: .Cx ! 271: Integer negation. ! 272: .Dp Cx Li \&~ ! 273: .Va exp ! 274: .Cx ! 275: Bitwise complement. ! 276: .Dp Cx Li \&# ! 277: .Va exp ! 278: .Cx ! 279: Logical negation. ! 280: .Dp ! 281: .Ss Dyadic operators ! 282: are left associative and are less binding than monadic operators. ! 283: .Dp Cx Va e1 ! 284: .Li \&\+ ! 285: .Va e2 ! 286: .Cx ! 287: Integer addition. ! 288: .Dp Cx Va e1 ! 289: .Li \&\- ! 290: .Va e2 ! 291: .Cx ! 292: Integer subtraction. ! 293: .Dp Cx Va e1 ! 294: .Li \&* ! 295: .Va e2 ! 296: .Cx ! 297: Integer multiplication. ! 298: .Dp Cx Va e1 ! 299: .Li \&% ! 300: .Va e2 ! 301: .Cx ! 302: Integer division. ! 303: .Dp Cx Va e1 ! 304: .Li & ! 305: .Va e2 ! 306: .Cx ! 307: Bitwise conjunction. ! 308: .Dp Cx Va e1 ! 309: .Li \&| ! 310: .Va e2 ! 311: .Cx ! 312: Bitwise disjunction. ! 313: .Dp Cx Va e1 ! 314: .Li # ! 315: .Va e2 ! 316: .Cx ! 317: .Va E1 ! 318: rounded up to the next multiple of ! 319: .Va e2 . ! 320: .Dp ! 321: .Sh COMMANDS ! 322: Most commands consist of a verb followed by a modifier or list of modifiers. ! 323: The following verbs are available. ! 324: (The commands ! 325: .Ic ? ! 326: and ! 327: .Li / ! 328: may be followed by ! 329: .Li * ; ! 330: see the ! 331: ADDRESSES section ! 332: for further details.) ! 333: .Tw XXX ! 334: .Tp Cx Ic ? ! 335: .Va f ! 336: .Cx ! 337: Locations starting at ! 338: .Ad address ! 339: in ! 340: .Ar objfil ! 341: are printed according to the format ! 342: .Va f . ! 343: .Ad dot ! 344: is incremented by the sum of the increments for each format letter (q.v.). ! 345: .Tp Cx Ic / ! 346: .Va f ! 347: .Cx ! 348: Locations starting at ! 349: .Ad address ! 350: in ! 351: .Ar corfil ! 352: are printed according to the format ! 353: .Va f ! 354: and ! 355: .Ad dot ! 356: is incremented as for ! 357: .Ic ? . ! 358: .Tp Cx Ic = ! 359: .Va f ! 360: .Cx ! 361: The value of ! 362: .Ad address ! 363: itself is printed in the styles indicated by the format ! 364: .Va f . ! 365: (For ! 366: .Va i ! 367: format zero values are assumed ! 368: for the parts of the instruction that reference ! 369: subsequent words.) ! 370: .Tp ! 371: .Pp ! 372: A ! 373: .Va format ! 374: consists of one or more characters that specify a style of printing. ! 375: Each format character may be preceded by a decimal integer ! 376: that is a repeat count for the format character. ! 377: While stepping through a format ! 378: .Ad dot ! 379: is incremented by the amount given for each format letter. ! 380: If no format is given then the last format is used. ! 381: The format characters available are as follows. ! 382: Note that a backslash ! 383: .Cx ( ! 384: .Li \e ! 385: .Cx ) ! 386: .Cx ! 387: must be used ! 388: to quote the three numeric formats. ! 389: .Dw \&M_____\&M ! 390: .Dp Cx Ic 1 ! 391: .Cx \&\ \ \& ! 392: .Va 1 ! 393: .Cx ! 394: Print 1 byte in the current radix ! 395: (which may be either signed or unsigned; see the ! 396: .Ic $d ! 397: command). ! 398: .Dp Cx Ic 2 ! 399: .Cx \&\ \ \& ! 400: .Va 2 ! 401: .Cx ! 402: Print 2 bytes in the current radix. ! 403: .Dp Cx Ic 4 ! 404: .Cx \&\ \ \& ! 405: .Va 4 ! 406: .Cx ! 407: Print 4 bytes in the current radix. ! 408: .Dp Cx Ic v ! 409: .Cx \&\ \ \& ! 410: .Va 2 ! 411: .Cx ! 412: Print 2 bytes in the signed variant of the current radix. ! 413: .Dp Cx Ic V ! 414: .Cx \&\ \ \& ! 415: .Va 4 ! 416: .Cx ! 417: Print 4 bytes in the signed variant of the current radix. ! 418: .Dp Cx Ic o ! 419: .Cx \&\ \ \& ! 420: .Va 2 ! 421: .Cx ! 422: Print 2 bytes in unsigned octal. All octal numbers output by ! 423: .Nm adb ! 424: are preceded by 0. ! 425: .Dp Cx Ic O ! 426: .Cx \&\ \ \& ! 427: .Va 4 ! 428: .Cx ! 429: Print 4 bytes in unsigned octal. ! 430: .Dp Cx Ic q ! 431: .Cx \&\ \ \& ! 432: .Va 2 ! 433: .Cx ! 434: Print 2 bytes in signed octal. ! 435: .Dp Cx Ic Q ! 436: .Cx \&\ \ \& ! 437: .Va 4 ! 438: .Cx ! 439: Print 4 bytes in signed octal. ! 440: .Dp Cx Ic u ! 441: .Cx \&\ \ \& ! 442: .Va 2 ! 443: .Cx ! 444: Print 2 bytes in unsigned decimal. ! 445: .Dp Cx Ic U ! 446: .Cx \&\ \ \& ! 447: .Va 4 ! 448: .Cx ! 449: Print 4 bytes in long unsigned decimal. ! 450: .Dp Cx Ic d ! 451: .Cx \&\ \ \& ! 452: .Va 2 ! 453: .Cx ! 454: Print 2 bytes in signed decimal. ! 455: .Dp Cx Ic D ! 456: .Cx \&\ \ \& ! 457: .Va 4 ! 458: .Cx ! 459: Print 4 bytes in long signed decimal. ! 460: .Dp Cx Ic x ! 461: .Cx \&\ \ \& ! 462: .Va 2 ! 463: .Cx ! 464: Print 2 bytes in unsigned hexadecimal. ! 465: .Dp Cx Ic X ! 466: .Cx \&\ \ \& ! 467: .Va 4 ! 468: .Cx ! 469: Print 4 bytes in unsigned hexadecimal. ! 470: .Dp Cx Ic z ! 471: .Cx \&\ \ \& ! 472: .Va 2 ! 473: .Cx ! 474: Print 2 bytes in signed hexadecimal. ! 475: .Dp Cx Ic Z ! 476: .Cx \&\ \ \& ! 477: .Va 4 ! 478: .Cx ! 479: Print 4 bytes in signed hexadecimal. ! 480: .Dp Cx Ic f ! 481: .Cx \&\ \ \& ! 482: .Va 4 ! 483: .Cx ! 484: Print 4 bytes as a floating point number. ! 485: .Dp Cx Ic F ! 486: .Cx \&\ \ \& ! 487: .Va 8 ! 488: .Cx ! 489: Print 8 bytes as a double floating point number. ! 490: .Dp Cx Ic b ! 491: .Cx \&\ \ \& ! 492: .Va 1 ! 493: .Cx ! 494: Print 1 byte in unsigned octal. ! 495: .Dp Cx Ic c ! 496: .Cx \&\ \ \& ! 497: .Va 1 ! 498: .Cx ! 499: Print 1 byte as a character. ! 500: .Dp Cx Ic C ! 501: .Cx \&\ \ \& ! 502: .Va 1 ! 503: .Cx ! 504: Print 1 byte as a character, using ! 505: the standard escape convention where control characters ! 506: are printed as ! 507: .Cx \&^ Ar X ! 508: .Cx ! 509: and the delete character is printed as ^?. ! 510: .Dp Cx Ic s ! 511: .Cx \&\ \ \& ! 512: .Va n ! 513: .Cx ! 514: Print the addressed characters until a zero character is reached. ! 515: .Dp Cx Ic S ! 516: .Cx \&\ \ \& ! 517: .Va n ! 518: .Cx ! 519: Print a string using the ! 520: .Cx \&^ Ar X ! 521: .Cx ! 522: escape convention (see ! 523: .Ar C ! 524: above). ! 525: .Ar n ! 526: is the length of the string including its zero terminator. ! 527: .Dp Cx Ic Y ! 528: .Cx \&\ \ \& ! 529: .Va 4 ! 530: .Cx ! 531: Print 4 bytes in date format (see ! 532: .Xr ctime 3 ) . ! 533: .Dp Cx Ic i ! 534: .Cx \&\ \ \& ! 535: .Va n ! 536: .Cx ! 537: Print as machine instructions. ! 538: .Ar n ! 539: is the number of bytes occupied by the instruction. ! 540: This style of printing causes the numeric variables 1, 2, ... to be set ! 541: according to the offset parts of the arguments, if any, of the instruction ! 542: (up to 6 on the VAX). ! 543: .Dp Cx Ic a ! 544: .Cx \&\ \ \& ! 545: .Va 0 ! 546: .Cx ! 547: Print the value of ! 548: .Ad dot ! 549: in symbolic form. ! 550: Symbols are checked to ensure that they have an appropriate ! 551: type as indicated below. ! 552: .Dw AAAA ! 553: .Dp Va / ! 554: local or global data symbol ! 555: .Dp Va \&? ! 556: .Cx ! 557: local or global text symbol ! 558: .Dp Va \&= ! 559: .Cx ! 560: local or global absolute symbol ! 561: .Dp ! 562: .Dp Cx Ic p ! 563: .Cx \&\ \ \& ! 564: .Va 4 ! 565: .Cx ! 566: Print the addressed value in symbolic form using ! 567: the same rules for symbol lookup as ! 568: .Ic a . ! 569: .Dp Cx Ic t ! 570: .Cx \&\ \ \& ! 571: .Va 0 ! 572: .Cx ! 573: When preceded by an integer tabs to the next appropriate tab stop. ! 574: For example, ! 575: .Li 8t ! 576: moves to the next 8-space tab stop. ! 577: .Dp Cx Ic r ! 578: .Cx \&\ \ \& ! 579: .Va 0 ! 580: .Cx ! 581: Print a space. ! 582: .Dp Cx Ic n ! 583: .Cx \&\ \ \& ! 584: .Va 0 ! 585: .Cx ! 586: Print a newline. ! 587: .Dp Ic \*(Lq...\*(Rq ! 588: .Va 0 ! 589: .br ! 590: Print the enclosed string. ! 591: .Dp Ic \&^ ! 592: .Ad Dot ! 593: is decremented by the current increment. Nothing is printed. ! 594: .Dp Ic \&+ ! 595: .Ad Dot ! 596: is incremented by 1. Nothing is printed. ! 597: .Dp Ic \&\- ! 598: .Ad Dot ! 599: is decremented by 1. Nothing is printed. ! 600: .Dp newline ! 601: Repeat the previous command with a ! 602: .Va count ! 603: of 1. ! 604: .Dp ! 605: .Pp ! 606: .Tw $modifier ! 607: .Tp Cx Op Ic ?/ ! 608: .Ic l\ \& ! 609: .Va value mask ! 610: .Cx ! 611: Words starting at ! 612: .Ad dot ! 613: are masked with ! 614: .Va mask ! 615: and ! 616: compared with ! 617: .Va value ! 618: until a match is found. ! 619: If ! 620: .Cm L ! 621: is used then the match is for 4 bytes at a time instead of 2. ! 622: If no match is found then ! 623: .Ad dot ! 624: is unchanged; otherwise ! 625: .Ad dot ! 626: is set to the matched location. ! 627: If ! 628: .Va mask ! 629: is omitted then all bits are compared. ! 630: .Tp Cx Op Ic ?/ ! 631: .Ic w\ \& ! 632: .Va value ... ! 633: .Cx ! 634: Write the 2-byte ! 635: .Va value ! 636: into the addressed location. If the command is ! 637: .Ic W , ! 638: write 4 bytes. ! 639: Odd addresses ! 640: .Em are ! 641: allowed ! 642: when writing to the subprocess address space. ! 643: .Tp Cx Op Ic ?/ ! 644: .Ic m\ \& ! 645: .Ad b1 e1 f1 ! 646: .Op Ic ?/ ! 647: .Cx ! 648: New values for ! 649: .Pf \&( Ad b1 , e1 , f1 ) ! 650: are recorded. If less than three expressions are given then ! 651: the remaining map parameters are left unchanged. ! 652: If the ! 653: .Ic ? ! 654: or ! 655: .Ic / ! 656: is followed by ! 657: .Li * ! 658: then ! 659: the second segment ! 660: .Pf \&( Ad b2 , e2 , f2 ) ! 661: of the mapping is changed. ! 662: If the list is terminated by ! 663: .Ic ? ! 664: or ! 665: .Ic / ! 666: then the file ! 667: .Pf \&( Ar objfil ! 668: or ! 669: .Ar corfil ! 670: respectively) is used for subsequent requests. ! 671: For example, ! 672: .Sq Li /m? ! 673: will cause ! 674: .Ic / ! 675: to refer to ! 676: .Ar objfil . ! 677: .Tp Cx Ic > ! 678: .Va name ! 679: .Cx ! 680: .Ad Dot ! 681: is assigned to the variable or register named. ! 682: .Tp Ic \&! ! 683: A shell ! 684: .Pf \&( Pa /bin/sh ) ! 685: is called to read the rest of the line following ! 686: .Ic \&! . ! 687: .Tp Cx Cm $ ! 688: .Va modifier ! 689: .Cx ! 690: Miscellaneous commands. The available ! 691: .Va modifiers ! 692: are: ! 693: .Tw fil ! 694: .Tp Cx Cm < ! 695: .Va file ! 696: .Cx ! 697: Read commands from ! 698: .Va file ! 699: If this command is executed in a file, further commands ! 700: in the file are not seen. ! 701: If ! 702: .Va file ! 703: is omitted, the current input stream is terminated. If a ! 704: .Va count ! 705: is given, and is zero, the command will be ignored. ! 706: The value of the count will be placed in variable ! 707: .Va 9 ! 708: before the first command in ! 709: .Va file ! 710: is executed. ! 711: .Tp Cx Cm << ! 712: .Va file ! 713: .Cx ! 714: Similar to ! 715: .Cm < ! 716: except it can be used in a file of commands without ! 717: causing the file to be closed. Variable ! 718: .Va 9 ! 719: is saved during the execution of this command, and restored when it completes. ! 720: There is a (small) finite limit to the number of ! 721: .Cm << ! 722: files that can be open at once. ! 723: .Tp Cx Cm > ! 724: .Va file ! 725: .Cx ! 726: Append output to the file ! 727: .Va file , ! 728: which is created if it does not exist. If ! 729: .Va file ! 730: is omitted, output is returned to the terminal. ! 731: .Tp Cx Cm ? ! 732: .Va file ! 733: .Cx ! 734: Print process id, the signal which caused stoppage or termination, ! 735: as well as the registers as ! 736: .Ic $r . ! 737: This is the default if ! 738: .Va modifier ! 739: is omitted. ! 740: .Tp Cm r ! 741: Print the general registers and the instruction addressed by ! 742: .Nm pc . ! 743: .Ad Dot ! 744: is set to ! 745: .Nm pc . ! 746: .Tp Cm b ! 747: Print all breakpoints and their associated counts and commands. ! 748: .Tp Cm c ! 749: C stack backtrace. If ! 750: .Ad address ! 751: is given then it is taken as the address of the current frame ! 752: instead of the contents of the frame\-pointer register. If ! 753: .Cm C ! 754: is used then the names and (32 bit) values of all automatic ! 755: and static variables are printed for each active function ! 756: (this is partially broken; the names are not now available). If ! 757: .Va count ! 758: is given then only the first ! 759: .Va count ! 760: frames are printed. ! 761: .Tp Cm d ! 762: Set the default radix to ! 763: .Ad address ! 764: and report the new value. If no ! 765: .Ad address ! 766: is given, the default radix is not changed. ! 767: The new radix must be between -16 (decimal) and 16 (decimal) ! 768: and must not be 0, 1, or -1. ! 769: A negative radix implies that numbers printed in that radix ! 770: will be treated as signed; otherwise they are treated as unsigned. ! 771: Note that ! 772: .Ad address ! 773: is interpreted in the (old) current radix. ! 774: Thus \*(lq10$d\*(rq simply changes the default radix to unsigned. ! 775: To make signed decimal the default radix, use \*(lq-0t10$d\*(rq. ! 776: .Tp Cm e ! 777: The names and values of external variables are printed. ! 778: .Tp Cm w ! 779: Set the page width for output to ! 780: .Ad address ! 781: (default 80). ! 782: .Tp Cm s ! 783: Set the limit for symbol matches to ! 784: .Ad address ! 785: (default 1024). ! 786: .Tp Cm q ! 787: Exit from ! 788: .Nm adb . ! 789: .Tp Cm v ! 790: Print all non zero variables in octal. ! 791: .Tp Cm m ! 792: Print the address map. ! 793: .Tp Cm p ! 794: .Pf \&( Em Kernel debugging ) ! 795: Change the current kernel memory mapping to map the designated ! 796: .Sy user structure ! 797: to the address given by the symbol ! 798: .Sy _u . ! 799: The ! 800: .Ad address ! 801: argument is the address of the user's user page table entries. ! 802: .Tp ! 803: .Tp Cx Cm : ! 804: .Va modifier ! 805: .Cx ! 806: Manage a subprocess. Available modifiers are: ! 807: .Tw Ds ! 808: .Tp Cx Cm b ! 809: .Va c ! 810: .Cx ! 811: Set breakpoint at ! 812: .Ad address . ! 813: The breakpoint is executed ! 814: .Va count\-1 ! 815: times before causing a stop, ! 816: after which it stops unconditionally. ! 817: Each time the breakpoint is encountered the command ! 818: .Va c ! 819: is executed. If this command is omitted or sets ! 820: .Ad dot ! 821: to zero, the breakpoint causes a stop immediately, ! 822: regardless of any remaining count. ! 823: .Tp Cm d ! 824: Delete breakpoint at ! 825: .Ad address . ! 826: .Tp Cm D ! 827: Delete all breakpoints. ! 828: .Tp Cm r ! 829: Run ! 830: .Ar objfil ! 831: as a subprocess. If ! 832: .Ad address ! 833: is given explicitly then the program is entered at this point; otherwise ! 834: the program is entered at its standard entry point. ! 835: .Va count ! 836: specifies how many breakpoints are to be ignored before stopping. ! 837: Arguments to the subprocess may be supplied on the same line as the command. ! 838: An argument starting with < or > causes the standard ! 839: input or output to be established for the command. ! 840: .Tp Cx Cm c ! 841: .Va s ! 842: .Cx ! 843: The subprocess is continued with signal ! 844: .Va s ! 845: see ! 846: .Xr sigvec 2 . ! 847: If ! 848: .Ad address ! 849: is given then the subprocess is continued at this address. ! 850: If no signal is specified then the signal ! 851: that caused the subprocess to stop is sent. ! 852: Breakpoint skipping is the same as for ! 853: .Cm r . ! 854: .Tp Cx Cm s ! 855: .Va s ! 856: .Cx ! 857: As for ! 858: .Cm c ! 859: except that the subprocess is single stepped ! 860: .Va count ! 861: times. If there is no current subprocess then ! 862: .Ar objfil ! 863: is run as a subprocess as for ! 864: .Cm r . ! 865: In this case no signal can be sent; the remainder of the line ! 866: is treated as arguments to the subprocess. ! 867: .Tp Cm k ! 868: The current subprocess, if any, is terminated. ! 869: .Tp ! 870: .Tp ! 871: .Sh VARIABLES ! 872: .Nm Adb ! 873: provides a number of variables. ! 874: Named variables are set initially by ! 875: .Nm adb ! 876: but are not used subsequently. ! 877: Numbered variables are reserved for communication as follows. ! 878: .Dw Ds ! 879: .Di L ! 880: .Dp \&0 ! 881: The last value printed. ! 882: .Dp \&1 ! 883: The last offset part of an instruction source. ! 884: This continues up through at most 6 on the VAX. ! 885: For a three-operand instruction, variable 2 is the second source offset ! 886: and variable 3 the destination offset part. ! 887: .Dp \&9 ! 888: The count on the last $< or $<< command. ! 889: .Dp ! 890: On entry the following are set from the system header in the ! 891: .Ar corfil . ! 892: If ! 893: .Ar corfil ! 894: does not appear to be a ! 895: .Pa core ! 896: file then these values are set from ! 897: .Ar objfil . ! 898: .Dw Ds ! 899: .Di L ! 900: .Dp b ! 901: The base address of the data segment. ! 902: .Dp d ! 903: The data segment size. ! 904: .Dp e ! 905: The entry point. ! 906: .Dp m ! 907: The `magic' number (0407, 0410 or 0413). ! 908: .Dp s ! 909: The stack segment size. ! 910: .Dp t ! 911: The text segment size. ! 912: .Sh ADDRESSES ! 913: The address in a file associated with ! 914: a written address is determined by a mapping associated with that file. ! 915: Each mapping is represented by two triples ! 916: .Pf \&( Ad b1 , e1 , f1 ) ! 917: and ! 918: .Pf \&( Ad b2 , e2 , f2 ) ! 919: and the ! 920: .Ad file ! 921: .Ad address ! 922: corresponding to a written ! 923: .Ad address ! 924: is calculated as follows. ! 925: .Pp ! 926: .Ds I ! 927: .Cx Ad b1 ! 928: .Sy \&\*(<= ! 929: .Ad address ! 930: .Sy < ! 931: .Ad e1 ! 932: .Sy \ \&\(->\ \& ! 933: .Ad file address ! 934: .Sy = ! 935: .Ad address ! 936: .Sy + ! 937: .Ad f1 ! 938: .Sy \- ! 939: .Ad b1 , ! 940: .Cx \ \& ! 941: .Cx otherwise, ! 942: .Cx ! 943: .De ! 944: .Pp ! 945: .Ds I ! 946: .Cx Ad b2 ! 947: .Sy \&\*(<= ! 948: .Ad address ! 949: .Sy < ! 950: .Ad e2 ! 951: .Sy \ \&\(->\ \& ! 952: .Ad file address ! 953: .Sy = ! 954: .Ad address ! 955: .Sy + ! 956: .Ad f2 ! 957: .Sy \- ! 958: .Ad b2 , ! 959: .Cx ! 960: .De ! 961: .Pp ! 962: otherwise, the requested ! 963: .Ar address ! 964: is not legal. In some cases (e.g. for programs with separated I and D ! 965: space) the two segments for a file may overlap. If a ! 966: .Ic ? ! 967: or ! 968: .Ic / ! 969: is followed by an ! 970: .Ic * ! 971: then only the second triple is used. ! 972: .Pp ! 973: The initial setting of both mappings is suitable for normal ! 974: .Pa a.out ! 975: and ! 976: .Pa core ! 977: files. If either file is not of the kind expected then, for that file, ! 978: .Ad b1 ! 979: is set to ! 980: .Li 0 , ! 981: .Ad e1 ! 982: is set to the maximum file size and ! 983: .Ad f1 ! 984: is set to 0; in this way the whole ! 985: file can be examined with no address translation. ! 986: .Pp ! 987: .Sh FILES ! 988: .Dw a.out ! 989: .Di L ! 990: .Dp Pa a.out ! 991: .Dp Pa core ! 992: .Dp ! 993: .Sh SEE ALSO ! 994: .Xr cc 1 , ! 995: .Xr dbx 1 , ! 996: .Xr ptrace 2 , ! 997: .Xr a.out 5 , ! 998: .Xr core 5 ! 999: .Sh HISTORY ! 1000: .Nm Adb ! 1001: was first released with Version 7 AT&T UNIX. The version ! 1002: of ! 1003: .Nm adb ! 1004: this man page describes ! 1005: is descended from the orignial. ! 1006: .Sh DIAGNOSTICS ! 1007: .Li `adb' ! 1008: when there is no current command or format. ! 1009: Comments about inaccessible files, syntax errors, ! 1010: abnormal termination of commands, etc. ! 1011: Exit status is 0, unless last command failed or returned nonzero status. ! 1012: .Sh BUGS ! 1013: Since no shell is invoked to interpret the arguments of the ! 1014: .Ic :r ! 1015: command, the customary wild-card and variable expansions cannot occur.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.