|
|
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.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.