Annotation of researchv10dc/man/man9/pi.9, revision 1.1

1.1     ! root        1: .TH PI 9.1
        !             2: .CT 1 debug_tune
        !             3: .SH NAME
        !             4: pi, 3pi \- process inspector
        !             5: .SH SYNOPSIS
        !             6: .B pi
        !             7: [
        !             8: .B -t
        !             9: .I corefile objectfile
        !            10: ]
        !            11: .PP
        !            12: .B 3pi
        !            13: [
        !            14: .B -p
        !            15: .I person
        !            16: ]
        !            17: .SH DESCRIPTION
        !            18: .I Pi
        !            19: is a C debugger that
        !            20: is bound dynamically to multiple subject processes or core dumps.
        !            21: It works better for programs compiled
        !            22: .I cc
        !            23: .IR \-g .
        !            24: .I Pi
        !            25: uses the
        !            26: .IR Pads (9.5)
        !            27: multi-window user interface.
        !            28: There are three types of windows:
        !            29: debugger control windows,
        !            30: which access the global state of the debugger;
        !            31: process control windows (exactly one per process),
        !            32: which start and stop processes and connect to process-specific functions;
        !            33: and process inspection windows,
        !            34: which include viewers for source text and memory, formatted various ways.
        !            35: .PP
        !            36: The most important debugger control window is the
        !            37: .I pi
        !            38: window itself.
        !            39: Each line within the
        !            40: .I pi
        !            41: window refers to a specific process.
        !            42: These lines may be introduced to the window by running
        !            43: .IR ps (1)
        !            44: from the button 3 menu;
        !            45: by typing a file name, either a
        !            46: .IR proc (4)
        !            47: name, or the name of a core image followed by the name of the binary that created
        !            48: the core;
        !            49: or by typing a command, prefixed by an exclamation 
        !            50: .LR ! ,
        !            51: to be executed as a child of
        !            52: .IR pi .
        !            53: There are several ways to access a process (using the button 2 menu),
        !            54: each of which generates a process control window:
        !            55: .TF hang\ &\ take\ over
        !            56: .TP
        !            57: .B open process
        !            58: Attach to a running process, often one started with
        !            59: .IR hang (1).
        !            60: .PD0
        !            61: .TP
        !            62: .B open core
        !            63: Attach to a core image.
        !            64: .TP
        !            65: .B open child
        !            66: Attach to a process forked by a process being debugged by the current
        !            67: .IR pi.
        !            68: .TP
        !            69: .B take over
        !            70: Rebind an existing process window hierarchy (pointed to with the mouse)
        !            71: to the named process,
        !            72: which must be an instance of the identical program.
        !            73: .TP
        !            74: .B hang & open proc 
        !            75: Execute a command afresh, beginning it in the
        !            76: stopped state, and redirecting IO to
        !            77: .FR /dev/null .
        !            78: .TP
        !            79: .B hang & take over
        !            80: Same, also binding to an existing process window.
        !            81: .PD
        !            82: .PP
        !            83: The process window indicates the process's state,
        !            84: shows the call stack traceback
        !            85: and connects to windows that access source text,
        !            86: local variables within a stack frame,
        !            87: raw memory, and so on.
        !            88: These windows are cross-connected, so, for example,
        !            89: an instruction in a process's assembly language window can
        !            90: be inspected in hexadecimal in the raw memory window.
        !            91: Closing the process control window closes all the windows under it.
        !            92: .PP
        !            93: The following menu functions are provided by
        !            94: the various window types in
        !            95: .IR pi .
        !            96: Initially there are these windows available:
        !            97: .TP 0.5i
        !            98: .B Help
        !            99: Reminder of user interface mechanics.
        !           100: .TP
        !           101: .B Pi
        !           102: Overall control of processes, core dumps and programs.
        !           103: A process is identified by its pathname or command line.
        !           104: Process symbols are found in the executable file from which the process was loaded,
        !           105: but may be overridden.
        !           106: Symbols for core dumps must be supplied explicitly, after the core filename.
        !           107: \fBSynopsis\fP:
        !           108: Identify and open process or core dump;
        !           109: run a program as
        !           110: .I Pi's
        !           111: child;
        !           112: take over a process with the debugging environment of a different one.
        !           113: .TP
        !           114: .B Pwd/cd
        !           115: change the working directory of the debugger.
        !           116: .SS Process Window
        !           117: Selecting and opening a process from the Pi window creates a new
        !           118: window with overall control of that process.
        !           119: It shows the process state, and a traceback if the process is halted or dead.
        !           120: States are:
        !           121: .TF EVENT\ PENDING
        !           122: .TP 
        !           123: .SM
        !           124: .B ACTIVE
        !           125: running normally
        !           126: .TP
        !           127: .SM
        !           128: .B HALTED
        !           129: halted asynchronously by a debugger
        !           130: .TP
        !           131: .SM
        !           132: .B BREAKPOINT
        !           133: halted on reaching breakpoint
        !           134: .TP
        !           135: .SM
        !           136: .B STMT STEPPED
        !           137: halted after executing C source statement(s)
        !           138: .TP
        !           139: .SM
        !           140: .B INSTR STEPPED
        !           141: halted after executing machine instruction(s)
        !           142: .TP
        !           143: .SM
        !           144: .B EVENT PENDING
        !           145: halted about to receive a signal being traced
        !           146: .TP
        !           147: .SM
        !           148: .B ERROR STATE
        !           149: the process has probably exited
        !           150: .PD
        !           151: .LP
        !           152: The menu operations on the process are:
        !           153: .TF EVENT\ PENDING
        !           154: .TP
        !           155: .B go
        !           156: let the process run
        !           157: .PD 0
        !           158: .TP
        !           159: .B stop
        !           160: stop the process
        !           161: .TP
        !           162: .B kill
        !           163: send
        !           164: .B SIGKILL
        !           165: to the process; see
        !           166: .IR signal (2)
        !           167: .TP
        !           168: .B src text
        !           169: open source text window(s)
        !           170: .TP
        !           171: .B Signals
        !           172: open window for sending and trapping signals
        !           173: .TP
        !           174: .B Globals
        !           175: open window for evaluating expression in global scope
        !           176: .TP
        !           177: .B RawMemory
        !           178: open window for editing uninterpreted memory
        !           179: .TP
        !           180: .B Assembler
        !           181: open window for disassembler
        !           182: .PD
        !           183: .LP
        !           184: Each line of the call stack traceback describes one function.
        !           185: Each function in the traceback can open an expression evaluator window
        !           186: or display its current source line.
        !           187: .SS Globals and Stack Frame Windows
        !           188: .PP
        !           189: These windows evaluate expressions with respect to global scope,
        !           190: and scope in a function, respectively.
        !           191: A stack frame window is opened from a line in the call stack traceback or
        !           192: from a line of source text.
        !           193: A stack frame can find its active source line in a source window or the stack
        !           194: frame window of its caller.
        !           195: .LP
        !           196: C expressions can be entered by the keyboard or mouse.
        !           197: The unary operators
        !           198: .I fabs
        !           199: and
        !           200: .I sizeof
        !           201: are supported; the only assignment operator is 
        !           202: .LR = .
        !           203: Functions from the user program may be called.
        !           204: New expressions can be derived from old ones by the keyboard or mouse.
        !           205: In menus and the keyboard,
        !           206: .B $
        !           207: means the expression in the current line.
        !           208: The VAX registers are called
        !           209: .B $r0 
        !           210: to
        !           211: .BR $r15 ;
        !           212: the address of a register is
        !           213: the location at which it was saved.
        !           214: The format in which values are displayed can be changed.
        !           215: The raw memory editor may be entered using an expression's value as address.
        !           216: .PP
        !           217: An expression may be made a
        !           218: .IR spy .
        !           219: The value of a spy expression is evaluated and displayed
        !           220: each time the debugger looks at the process.
        !           221: If the value of a spy changes the process is halted
        !           222: at the next instruction, statement or breakpoint.
        !           223: .LP
        !           224: The comma operator is useful in conditional breakpoints because the values
        !           225: of its subexpressions are displayed.
        !           226: E.g. x, y, x==y traces the values of x and y when the condition fails;
        !           227: x, y, 0 just traces.
        !           228: .LP
        !           229: To cross scope boundaries, the environment (a function identifier)
        !           230: in which an expression is to be evaluated may be specified as:
        !           231: { expr } function.
        !           232: From the source directory window, file static variables can be promoted
        !           233: to appear in the menu of global variables.
        !           234: .SS Source Text Windows
        !           235: The source file directory window lists all the source files, if there are
        !           236: two or more.
        !           237: A textual prefix, entered from the keyboard, points to a source directory,
        !           238: without changing the working directory.
        !           239: Each source file is in a separate window, opened when needed.
        !           240: The source file's pathname as given to
        !           241: .I cc
        !           242: can be overridden from the keyboard.
        !           243: If things go wrong, use
        !           244: .B reopen
        !           245: to open the file afresh.
        !           246: \fBSynopsis\fP:
        !           247: set/clear (conditional) breakpoint;
        !           248: single-step source statements;
        !           249: step into (rather than over) a function;
        !           250: go the process;
        !           251: show the statement for the current PC;
        !           252: open a stack frame window for a source line's function;
        !           253: evaluate expression;
        !           254: disassemble first instruction of source statement;
        !           255: context search for string.
        !           256: .SS Breakpoints Window
        !           257: Lists all the active source and assembler breakpoints and related errors.
        !           258: \fBSynopsis\fP:
        !           259: show source or assembler for a breakpoint;
        !           260: clear breakpoint;
        !           261: clear all breakpoints.
        !           262: .SS Signals Window
        !           263: Lists all signal types, showing which ones are traced.
        !           264: \fBSynopsis\fP:
        !           265: Change which signals are traced;
        !           266: send a signal to the subject process;
        !           267: clear pending signal;
        !           268: stop process on
        !           269: .I exec.
        !           270: .SS Raw Memory Window
        !           271: In this window
        !           272: memory is a viewed as a sequence of 1-, 2-, 4- or 8-byte cells.
        !           273: \fBSynopsis\fP:
        !           274: set cell address;
        !           275: change cell size;
        !           276: change display format;
        !           277: display cells above and below;
        !           278: indirect to cell;
        !           279: change cell value;
        !           280: spy on memory cell;
        !           281: disassemble instruction at cell.
        !           282: .SS (Dis)assembler Window
        !           283: In this window memory is viewed as a sequence of instructions.
        !           284: \fBSynopsis\fP:
        !           285: set instruction address;
        !           286: display more instructions;
        !           287: change display format;
        !           288: display instruction as cell in raw memory window;
        !           289: set/clear breakpoint on instruction;
        !           290: open stack frame window for instruction's function;
        !           291: display instruction at current PC;
        !           292: single step instruction(s);
        !           293: step over a function call instead of into the function.
        !           294: .SS Exec and Fork
        !           295: If a process controlled by
        !           296: .I pi
        !           297: does an
        !           298: .IR exec ()
        !           299: and an exec break is set in the Signals window,
        !           300: the process is suspended as if started by
        !           301: .IR hang (1).
        !           302: To debug the process after the
        !           303: .IR exec ,
        !           304: close the original process window and re-open it.
        !           305: When re-opened it will get the new symbol tables.
        !           306: .PP
        !           307: To debug a child process: (i) set a breakpoint in code that will be executed
        !           308: in the child after the fork; (ii) execute the fork
        !           309: .I at full speed
        !           310: (the child inherits the parent's breakpoints, which aren't there if the
        !           311: parent is stepped);
        !           312: (iii)
        !           313: .I before altering any breakpoints,
        !           314: get a fresh
        !           315: .I ps
        !           316: in the Pi window and apply
        !           317: .B open child
        !           318: to the child.
        !           319: The child should be stopped on the inherited breakpoint, but it and all other
        !           320: breakpoints should have been cleared.
        !           321: .SS Kernel
        !           322: The state of kernel variables associated with a process may be examined
        !           323: by giving their name or virtual address.
        !           324: The
        !           325: .B UNIX
        !           326: environment variable specifies the file from which the system was
        !           327: loaded; the default is
        !           328: .IR /unix .
        !           329: Kernel dumps may be examined by opening the
        !           330: `kernel pi' window.
        !           331: .SS Just A Traceback
        !           332: With the
        !           333: .B -t
        !           334: option
        !           335: .I pi
        !           336: writes a traceback on its standard output and quits.
        !           337: .SS 3pi
        !           338: .I 3pi
        !           339: is a variant of
        !           340: .I pi
        !           341: for debugging 5620 programs running under
        !           342: .IR mux (9.1).
        !           343: It creates two terminal processes: one for its access to terminal memory
        !           344: and graphics and a second for its
        !           345: .IR Pads (9.5)
        !           346: interface.
        !           347: .SS Remote Debugging
        !           348: With the
        !           349: .B -p
        !           350: option
        !           351: .I 3pi
        !           352: loads its first process, but not
        !           353: .IR Pads .
        !           354: Instead, it mails a
        !           355: .I 3pi
        !           356: command to
        !           357: .IR person ,
        !           358: to be executed on any host in the local network.
        !           359: That
        !           360: .I 3pi
        !           361: command loads
        !           362: .I Pads
        !           363: on
        !           364: .IR person 's
        !           365: terminal, and connects to the originator's terminal.
        !           366: If separate hosts are involved and the versions of critical files differ,
        !           367: be careful with pathnames.
        !           368: .SS 3pi Graphics
        !           369: Points, rectangles, textures and bitmaps can be displayed graphically.
        !           370: .SS 3pi - pi
        !           371: Most differences come from obvious differences in the hardware and
        !           372: software architectures.
        !           373: Also, in
        !           374: .I 3pi
        !           375: function calls are executed by a debugger process on its own call stack.
        !           376: .SH SEE ALSO
        !           377: T. A. Cargill,
        !           378: `The Feel of Pi',
        !           379: this manual, Volume 2
        !           380: .br
        !           381: .IR hang (1), 
        !           382: .IR proc (4), 
        !           383: .IR adb (1),
        !           384: .IR cin (1),
        !           385: .IR nm (1),
        !           386: .IR pads (9.5)
        !           387: .SH BUGS
        !           388: In switch statements there is no boundary between the last case
        !           389: and the branch code; the program
        !           390: .I appears
        !           391: to jump to the last case (but is really in the branch)
        !           392: and then to the real case.
        !           393: .br
        !           394: A changed spy only stops the process at a breakpoint or while stepping.
        !           395: An expression can be cast only by menu.
        !           396: .br
        !           397: Functions may only be called when the process is stopped and not in a system call.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.