Blame


1 a01e5836 2004-04-21 devnull .TH ACID 1
2 a01e5836 2004-04-21 devnull .SH NAME
3 a01e5836 2004-04-21 devnull acid, acidtypes \- debugger
4 a01e5836 2004-04-21 devnull .SH SYNOPSIS
5 a01e5836 2004-04-21 devnull .B acid
6 a01e5836 2004-04-21 devnull [
7 c8b6342d 2005-01-13 devnull .BI -l " library
8 a01e5836 2004-04-21 devnull ]
9 a01e5836 2004-04-21 devnull [
10 a01e5836 2004-04-21 devnull .B -wq
11 a01e5836 2004-04-21 devnull ] [
12 a01e5836 2004-04-21 devnull .B -m
13 a01e5836 2004-04-21 devnull .I machine
14 a01e5836 2004-04-21 devnull ] [
15 a01e5836 2004-04-21 devnull .I pid
16 a01e5836 2004-04-21 devnull |
17 a01e5836 2004-04-21 devnull .I core
18 a01e5836 2004-04-21 devnull ]
19 a01e5836 2004-04-21 devnull [
20 a01e5836 2004-04-21 devnull .I textfile
21 a01e5836 2004-04-21 devnull ]
22 a01e5836 2004-04-21 devnull .PP
23 a01e5836 2004-04-21 devnull .B acidtypes
24 a01e5836 2004-04-21 devnull [
25 a01e5836 2004-04-21 devnull .B -p
26 a01e5836 2004-04-21 devnull .I prefix
27 a01e5836 2004-04-21 devnull ]
28 a01e5836 2004-04-21 devnull .I file
29 058b0118 2005-01-03 devnull \&...
30 a01e5836 2004-04-21 devnull .\" .PP
31 a01e5836 2004-04-21 devnull .\" .B acid
32 a01e5836 2004-04-21 devnull .\" .B -l
33 a01e5836 2004-04-21 devnull .\" .B truss
34 a01e5836 2004-04-21 devnull .\" .I textfile
35 a01e5836 2004-04-21 devnull .\" .PP
36 a01e5836 2004-04-21 devnull .\" .B acid
37 a01e5836 2004-04-21 devnull .\" .B -l
38 a01e5836 2004-04-21 devnull .\" .B trump
39 a01e5836 2004-04-21 devnull .\" [
40 a01e5836 2004-04-21 devnull .\" .I pid
41 a01e5836 2004-04-21 devnull .\" ]
42 a01e5836 2004-04-21 devnull .\" [
43 a01e5836 2004-04-21 devnull .\" .I textfile
44 a01e5836 2004-04-21 devnull .\" ]
45 a01e5836 2004-04-21 devnull .SH DESCRIPTION
46 a01e5836 2004-04-21 devnull .I Acid
47 a01e5836 2004-04-21 devnull is a programmable symbolic debugger.
48 a01e5836 2004-04-21 devnull It can inspect one or more processes that share an address space.
49 a01e5836 2004-04-21 devnull A program to be debugged may be specified by the process id of
50 a01e5836 2004-04-21 devnull a running or defunct process,
51 bfe4377e 2020-05-19 rsc or by the name of the program's text file
52 c8b6342d 2005-01-13 devnull .RB ( a.out
53 a01e5836 2004-04-21 devnull by default).
54 a01e5836 2004-04-21 devnull At the prompt,
55 a01e5836 2004-04-21 devnull .I acid
56 a01e5836 2004-04-21 devnull will store function definitions or print the value of expressions.
57 a01e5836 2004-04-21 devnull Options are
58 a01e5836 2004-04-21 devnull .TP .9i
59 a01e5836 2004-04-21 devnull .B -w
60 a01e5836 2004-04-21 devnull Allow the textfile to be modified.
61 a01e5836 2004-04-21 devnull .TP
62 a01e5836 2004-04-21 devnull .B -q
63 a01e5836 2004-04-21 devnull Print variable renamings at startup.
64 a01e5836 2004-04-21 devnull .TP
65 a01e5836 2004-04-21 devnull .BI -l " library
66 bfe4377e 2020-05-19 rsc Load from
67 a01e5836 2004-04-21 devnull .I library
68 a01e5836 2004-04-21 devnull at startup; see below.
69 a01e5836 2004-04-21 devnull .TP
70 a01e5836 2004-04-21 devnull .BI -m " machine
71 a01e5836 2004-04-21 devnull Assume instructions are for the given CPU type
72 058b0118 2005-01-03 devnull (see
73 d32deab1 2020-08-16 rsc .MR mach (3) )
74 058b0118 2005-01-03 devnull instead of using the executable header to select
75 a01e5836 2004-04-21 devnull the CPU type.
76 a01e5836 2004-04-21 devnull .TP
77 a01e5836 2004-04-21 devnull .BI -k
78 a01e5836 2004-04-21 devnull Debug the kernel state for the process, rather than the user state.
79 a01e5836 2004-04-21 devnull .PP
80 a01e5836 2004-04-21 devnull At startup,
81 a01e5836 2004-04-21 devnull .I acid
82 a01e5836 2004-04-21 devnull obtains standard function definitions from the library file
83 c3674de4 2005-01-11 devnull .BR \*9/acid/port ,
84 a01e5836 2004-04-21 devnull architecture-dependent functions from
85 c3674de4 2005-01-11 devnull .BR \*9/acid/$objtype ,
86 a01e5836 2004-04-21 devnull user-specified functions from
87 bfe4377e 2020-05-19 rsc .BR $HOME/lib/acid ,
88 bfe4377e 2020-05-19 rsc and further functions from
89 a01e5836 2004-04-21 devnull .B -l
90 a01e5836 2004-04-21 devnull files.
91 a01e5836 2004-04-21 devnull Definitions in any file may override previously defined functions.
92 a01e5836 2004-04-21 devnull If the function
93 a01e5836 2004-04-21 devnull .IR acidinit ()
94 a01e5836 2004-04-21 devnull is defined, it will be invoked after all modules have been loaded.
95 058b0118 2005-01-03 devnull Then the function
96 058b0118 2005-01-03 devnull .IR acidmap ()
97 058b0118 2005-01-03 devnull will be invoked if defined.
98 c3674de4 2005-01-11 devnull .B \*9/acid/port
99 058b0118 2005-01-03 devnull provides a definition of
100 058b0118 2005-01-03 devnull .I acidmap
101 058b0118 2005-01-03 devnull that attaches all the shared libraries being used by the target process
102 058b0118 2005-01-03 devnull and then runs
103 058b0118 2005-01-03 devnull .I acidtypes
104 058b0118 2005-01-03 devnull .RI ( q.v. )
105 058b0118 2005-01-03 devnull to create
106 a01e5836 2004-04-21 devnull .I acid
107 a01e5836 2004-04-21 devnull functions for examining data structures.
108 a01e5836 2004-04-21 devnull .SS Language
109 bfe4377e 2020-05-19 rsc Symbols of the program being debugged become integer
110 a01e5836 2004-04-21 devnull variables whose values are addresses.
111 a01e5836 2004-04-21 devnull Contents of addresses are obtained by indirection.
112 a01e5836 2004-04-21 devnull Local variables are qualified by
113 a01e5836 2004-04-21 devnull function name, for example
114 a01e5836 2004-04-21 devnull .BR main:argv .
115 a01e5836 2004-04-21 devnull When program symbols conflict with
116 a01e5836 2004-04-21 devnull .I acid
117 bfe4377e 2020-05-19 rsc words, distinguishing
118 a01e5836 2004-04-21 devnull .B $
119 a01e5836 2004-04-21 devnull signs are prefixed.
120 a01e5836 2004-04-21 devnull Such renamings are reported at startup; option
121 a01e5836 2004-04-21 devnull .B -q
122 a01e5836 2004-04-21 devnull suppresses them.
123 a01e5836 2004-04-21 devnull .PP
124 a01e5836 2004-04-21 devnull Variable types
125 a01e5836 2004-04-21 devnull .RI ( "integer, float, list, string" )
126 a01e5836 2004-04-21 devnull and formats are inferred from assignments.
127 a01e5836 2004-04-21 devnull Truth values false/true are attributed to zero/nonzero
128 a01e5836 2004-04-21 devnull integers or floats and to empty/nonempty lists or strings.
129 a01e5836 2004-04-21 devnull Lists are sequences of expressions surrounded by
130 bfe4377e 2020-05-19 rsc .BR {\^}
131 a01e5836 2004-04-21 devnull and separated by commas.
132 a01e5836 2004-04-21 devnull .PP
133 a01e5836 2004-04-21 devnull Expressions are much as in C,
134 a01e5836 2004-04-21 devnull but yield both a value and a format.
135 a01e5836 2004-04-21 devnull Casts to complex types are allowed.
136 a01e5836 2004-04-21 devnull Lists admit the following operators, with
137 a01e5836 2004-04-21 devnull subscripts counted from 0.
138 a01e5836 2004-04-21 devnull .IP
139 a01e5836 2004-04-21 devnull .BI head " list
140 a01e5836 2004-04-21 devnull .br
141 a01e5836 2004-04-21 devnull .BI tail " list
142 a01e5836 2004-04-21 devnull .br
143 a01e5836 2004-04-21 devnull .BI append " list", " element
144 a01e5836 2004-04-21 devnull .br
145 a01e5836 2004-04-21 devnull .BI delete " list", " subscript
146 a01e5836 2004-04-21 devnull .PP
147 a01e5836 2004-04-21 devnull Format codes are the same as in
148 d32deab1 2020-08-16 rsc .MR db (1) .
149 a01e5836 2004-04-21 devnull Formats may be attached to (unary) expressions with
150 a01e5836 2004-04-21 devnull .BR \e ,
151 a01e5836 2004-04-21 devnull e.g.
152 a01e5836 2004-04-21 devnull .BR (32*7)\eD .
153 a01e5836 2004-04-21 devnull There are two indirection operators,
154 a01e5836 2004-04-21 devnull .B *
155 a01e5836 2004-04-21 devnull to address a core image,
156 a01e5836 2004-04-21 devnull .B @
157 a01e5836 2004-04-21 devnull to address a text file.
158 a01e5836 2004-04-21 devnull The type and format of the result are determined by the format of the operand,
159 a01e5836 2004-04-21 devnull whose type must be integer.
160 a01e5836 2004-04-21 devnull .PP
161 a01e5836 2004-04-21 devnull Statements are
162 a01e5836 2004-04-21 devnull .IP
163 a01e5836 2004-04-21 devnull .BI if " expr " then " statement " "\fR[ \fPelse\fI statement \fR]
164 a01e5836 2004-04-21 devnull .br
165 a01e5836 2004-04-21 devnull .BI while " expr " do " statement
166 a01e5836 2004-04-21 devnull .br
167 a01e5836 2004-04-21 devnull .BI loop " expr" , " expr " do " statement
168 a01e5836 2004-04-21 devnull .br
169 a01e5836 2004-04-21 devnull .BI defn " name" ( args ") {" " statement \fP}
170 a01e5836 2004-04-21 devnull .br
171 a01e5836 2004-04-21 devnull .BI defn " name"
172 a01e5836 2004-04-21 devnull .br
173 a01e5836 2004-04-21 devnull .IB name ( args )
174 a01e5836 2004-04-21 devnull .br
175 a01e5836 2004-04-21 devnull .BI builtin " name" ( args )
176 a01e5836 2004-04-21 devnull .br
177 a01e5836 2004-04-21 devnull .BI local " name
178 a01e5836 2004-04-21 devnull .br
179 a01e5836 2004-04-21 devnull .BI return " expr
180 a01e5836 2004-04-21 devnull .br
181 a01e5836 2004-04-21 devnull .BR whatis " [ \fI name \fP]
182 a01e5836 2004-04-21 devnull .PP
183 a01e5836 2004-04-21 devnull The statement
184 a01e5836 2004-04-21 devnull .B defn
185 a01e5836 2004-04-21 devnull .I name
186 a01e5836 2004-04-21 devnull clears the definition for
187 a01e5836 2004-04-21 devnull .IR name .
188 a01e5836 2004-04-21 devnull A
189 a01e5836 2004-04-21 devnull .B defn
190 a01e5836 2004-04-21 devnull may override a built-in function;
191 a01e5836 2004-04-21 devnull prefixing a function call with
192 a01e5836 2004-04-21 devnull .B builtin
193 a01e5836 2004-04-21 devnull ignores any overriding
194 a01e5836 2004-04-21 devnull .BR defn ,
195 a01e5836 2004-04-21 devnull forcing the use of the built-in function.
196 a01e5836 2004-04-21 devnull .PP
197 a01e5836 2004-04-21 devnull Here is a partial list of functions; see the manual for a complete list.
198 a01e5836 2004-04-21 devnull .TF asm(address)
199 a01e5836 2004-04-21 devnull .TP
200 a01e5836 2004-04-21 devnull .B stk()
201 a01e5836 2004-04-21 devnull Print a stack trace for current process.
202 a01e5836 2004-04-21 devnull .TP
203 a01e5836 2004-04-21 devnull .B lstk()
204 a01e5836 2004-04-21 devnull Print a stack trace with values of local variables.
205 a01e5836 2004-04-21 devnull .TP
206 a01e5836 2004-04-21 devnull .B gpr()
207 a01e5836 2004-04-21 devnull Print general registers.
208 a01e5836 2004-04-21 devnull Registers can also be accessed by name, for example
209 a01e5836 2004-04-21 devnull .BR *R0 .
210 a01e5836 2004-04-21 devnull .TP
211 a01e5836 2004-04-21 devnull .B spr()
212 a01e5836 2004-04-21 devnull Print special registers such as program counter and stack pointer.
213 a01e5836 2004-04-21 devnull .TP
214 a01e5836 2004-04-21 devnull .B fpr()
215 a01e5836 2004-04-21 devnull Print floating-point registers.
216 a01e5836 2004-04-21 devnull .TP
217 a01e5836 2004-04-21 devnull .B regs()
218 a01e5836 2004-04-21 devnull Same as
219 a01e5836 2004-04-21 devnull .BR spr();gpr() .
220 a01e5836 2004-04-21 devnull .TP
221 a01e5836 2004-04-21 devnull .BI fmt( expr , format )
222 bfe4377e 2020-05-19 rsc Expression
223 a01e5836 2004-04-21 devnull .I expr
224 a01e5836 2004-04-21 devnull with format given by the character value of expression
225 a01e5836 2004-04-21 devnull .IR format .
226 a01e5836 2004-04-21 devnull .TP
227 a01e5836 2004-04-21 devnull .BI src( address )
228 a01e5836 2004-04-21 devnull Print 10 lines of source around the program address.
229 a01e5836 2004-04-21 devnull .TP
230 a01e5836 2004-04-21 devnull .BI Bsrc( address )
231 a01e5836 2004-04-21 devnull Get the source line for the program address
232 a01e5836 2004-04-21 devnull into a window of a running
233 d32deab1 2020-08-16 rsc .MR sam (1)
234 a01e5836 2004-04-21 devnull and select it.
235 a01e5836 2004-04-21 devnull .TP
236 a01e5836 2004-04-21 devnull .BI line( address )
237 a01e5836 2004-04-21 devnull Print source line nearest to the program address.
238 a01e5836 2004-04-21 devnull .TP
239 a01e5836 2004-04-21 devnull .B source()
240 a01e5836 2004-04-21 devnull List current source directories.
241 a01e5836 2004-04-21 devnull .TP
242 a01e5836 2004-04-21 devnull .BI addsrcdir( string )
243 a01e5836 2004-04-21 devnull Add a source directory to the list.
244 a01e5836 2004-04-21 devnull .TP
245 a01e5836 2004-04-21 devnull .BI filepc( where )
246 bfe4377e 2020-05-19 rsc Convert a string of the form
247 a01e5836 2004-04-21 devnull .IB sourcefile : linenumber
248 a01e5836 2004-04-21 devnull to a machine address.
249 a01e5836 2004-04-21 devnull .TP
250 a01e5836 2004-04-21 devnull .BI pcfile( address )
251 a01e5836 2004-04-21 devnull Convert a machine address to a source file name.
252 a01e5836 2004-04-21 devnull .TP
253 a01e5836 2004-04-21 devnull .BI pcline( address )
254 a01e5836 2004-04-21 devnull Convert a machine address to a source line number.
255 a01e5836 2004-04-21 devnull .TP
256 a01e5836 2004-04-21 devnull .BI bptab()
257 a01e5836 2004-04-21 devnull List breakpoints set in the current process.
258 a01e5836 2004-04-21 devnull .TP
259 a01e5836 2004-04-21 devnull .BI bpset( address )
260 a01e5836 2004-04-21 devnull Set a breakpoint in the current process at the given address.
261 a01e5836 2004-04-21 devnull (Doesn't work on Unix yet.)
262 a01e5836 2004-04-21 devnull .TP
263 a01e5836 2004-04-21 devnull .BI bpdel( address )
264 a01e5836 2004-04-21 devnull Delete a breakpoint from the current process.
265 a01e5836 2004-04-21 devnull .TP
266 a01e5836 2004-04-21 devnull .B cont()
267 a01e5836 2004-04-21 devnull Continue execution of current process and wait for it to stop.
268 a01e5836 2004-04-21 devnull .TP
269 a01e5836 2004-04-21 devnull .B step()
270 a01e5836 2004-04-21 devnull Execute a single machine instruction in the current process.
271 a01e5836 2004-04-21 devnull (Doesn't work on Unix yet.)
272 a01e5836 2004-04-21 devnull .TP
273 a01e5836 2004-04-21 devnull .B func()
274 a01e5836 2004-04-21 devnull Step repeatedly until after a function return.
275 a01e5836 2004-04-21 devnull .TP
276 a01e5836 2004-04-21 devnull .BI stopped( pid )
277 a01e5836 2004-04-21 devnull This replaceable function is called automatically when the given process
278 a01e5836 2004-04-21 devnull stops.
279 a01e5836 2004-04-21 devnull It normally prints the program counter and returns to the prompt.
280 a01e5836 2004-04-21 devnull .TP
281 a01e5836 2004-04-21 devnull .BI asm( address )
282 a01e5836 2004-04-21 devnull Disassemble 30 machine instructions beginning at the given address.
283 a01e5836 2004-04-21 devnull .TP
284 a01e5836 2004-04-21 devnull .BI mem( address , string )
285 a01e5836 2004-04-21 devnull Print a block of memory
286 a01e5836 2004-04-21 devnull interpreted according to a string of format codes.
287 a01e5836 2004-04-21 devnull .TP
288 a01e5836 2004-04-21 devnull .BI dump( address , n , string\fP)
289 a01e5836 2004-04-21 devnull Like
290 a01e5836 2004-04-21 devnull .BR mem (),
291 bfe4377e 2020-05-19 rsc repeated for
292 a01e5836 2004-04-21 devnull .I n
293 a01e5836 2004-04-21 devnull consecutive blocks.
294 a01e5836 2004-04-21 devnull .TP
295 a01e5836 2004-04-21 devnull .BI print( expr , ... )
296 a01e5836 2004-04-21 devnull Print the values of the expressions.
297 a01e5836 2004-04-21 devnull .TP
298 a01e5836 2004-04-21 devnull .BI newproc( arguments )
299 a01e5836 2004-04-21 devnull Start a new process with arguments given as a string
300 a01e5836 2004-04-21 devnull and halt at the first instruction.
301 a01e5836 2004-04-21 devnull .TP
302 a01e5836 2004-04-21 devnull .B new()
303 bfe4377e 2020-05-19 rsc Like
304 a01e5836 2004-04-21 devnull .IR newproc (),
305 a01e5836 2004-04-21 devnull but take arguments (except
306 a01e5836 2004-04-21 devnull .BR argv[0] )
307 a01e5836 2004-04-21 devnull from string variable
308 a01e5836 2004-04-21 devnull .BR progargs .
309 a01e5836 2004-04-21 devnull .TP
310 a01e5836 2004-04-21 devnull .B win()
311 bfe4377e 2020-05-19 rsc Like
312 a01e5836 2004-04-21 devnull .IR new (),
313 a01e5836 2004-04-21 devnull but run the process in a separate window.
314 a01e5836 2004-04-21 devnull .TP
315 a01e5836 2004-04-21 devnull .BI start( pid )
316 a01e5836 2004-04-21 devnull Start a stopped process.
317 a01e5836 2004-04-21 devnull .TP
318 a01e5836 2004-04-21 devnull .BI kill( pid )
319 a01e5836 2004-04-21 devnull Kill the given process.
320 a01e5836 2004-04-21 devnull .TP
321 a01e5836 2004-04-21 devnull .BI setproc( pid )
322 a01e5836 2004-04-21 devnull Make the given process current.
323 a01e5836 2004-04-21 devnull .TP
324 a01e5836 2004-04-21 devnull .BI rc( string )
325 a01e5836 2004-04-21 devnull Escape to the shell,
326 d32deab1 2020-08-16 rsc .MR rc (1) ,
327 a01e5836 2004-04-21 devnull to execute the command string.
328 a01e5836 2004-04-21 devnull .TP
329 a01e5836 2004-04-21 devnull .BI include( string )
330 a01e5836 2004-04-21 devnull Read acid commands from the named file.
331 a01e5836 2004-04-21 devnull .TP
332 a01e5836 2004-04-21 devnull .BI includepipe( string )
333 a01e5836 2004-04-21 devnull Run the command string, reading its standard output as acid commands.
334 a01e5836 2004-04-21 devnull .PD 0
335 a01e5836 2004-04-21 devnull .SS "Shared library segments
336 a01e5836 2004-04-21 devnull When a pid or core file is specified on the command line,
337 a01e5836 2004-04-21 devnull .I acid
338 a01e5836 2004-04-21 devnull will, as part of its startup, determine the set of shared libraries
339 a01e5836 2004-04-21 devnull in use by the process image and map those at appropriate locations.
340 bfe4377e 2020-05-19 rsc If
341 a01e5836 2004-04-21 devnull .I acid
342 a01e5836 2004-04-21 devnull is started without a pid or core file
343 a01e5836 2004-04-21 devnull and is subsequently attached to a process via
344 a01e5836 2004-04-21 devnull .BR setproc ,
345 a01e5836 2004-04-21 devnull the shared library maps can be initialized by calling
346 a01e5836 2004-04-21 devnull .BR dynamicmap() .
347 a01e5836 2004-04-21 devnull .SS "Type information
348 a01e5836 2004-04-21 devnull Unix compilers conventionally include detailed type information
349 a01e5836 2004-04-21 devnull in the debugging symbol section of binaries.
350 a01e5836 2004-04-21 devnull The external program
351 a01e5836 2004-04-21 devnull .B acidtypes
352 a01e5836 2004-04-21 devnull extracts this information and formats it as
353 a01e5836 2004-04-21 devnull .I acid
354 a01e5836 2004-04-21 devnull program text.
355 a01e5836 2004-04-21 devnull Once the shared libraries have been mapped, the default
356 a01e5836 2004-04-21 devnull .I acid
357 a01e5836 2004-04-21 devnull startup invokes
358 a01e5836 2004-04-21 devnull .B acidtypes
359 a01e5836 2004-04-21 devnull (via
360 a01e5836 2004-04-21 devnull .BR includepipe )
361 a01e5836 2004-04-21 devnull on the set of currently mapped text files.
362 a01e5836 2004-04-21 devnull The function
363 a01e5836 2004-04-21 devnull .B acidtypes()
364 a01e5836 2004-04-21 devnull can be called to rerun the command after changing
365 a01e5836 2004-04-21 devnull the set of mapped text files.
366 a01e5836 2004-04-21 devnull .SS "Acid Libraries
367 a01e5836 2004-04-21 devnull There are a number of
368 a01e5836 2004-04-21 devnull .I acid
369 a01e5836 2004-04-21 devnull `libraries' that provide higher-level debugging facilities. One notable
370 a01e5836 2004-04-21 devnull example is
371 a01e5836 2004-04-21 devnull .IR trump ,
372 a01e5836 2004-04-21 devnull which uses
373 a01e5836 2004-04-21 devnull .I acid
374 a01e5836 2004-04-21 devnull to trace memory allocation.
375 a01e5836 2004-04-21 devnull .I Trump
376 a01e5836 2004-04-21 devnull requires starting
377 a01e5836 2004-04-21 devnull .I acid
378 a01e5836 2004-04-21 devnull on the program, either by attaching to a running process or by
379 a01e5836 2004-04-21 devnull executing
380 a01e5836 2004-04-21 devnull .B new()
381 a01e5836 2004-04-21 devnull on a binary (perhaps after setting
382 a01e5836 2004-04-21 devnull .BR progargs ),
383 a01e5836 2004-04-21 devnull stopping the process, and then running
384 a01e5836 2004-04-21 devnull .B trump()
385 a01e5836 2004-04-21 devnull to execute the program under the scaffolding.
386 a01e5836 2004-04-21 devnull The output will be a trace of the memory allocation and free calls
387 a01e5836 2004-04-21 devnull executed by the program.
388 a01e5836 2004-04-21 devnull When finished tracing, stop the process and execute
389 a01e5836 2004-04-21 devnull .B untrump()
390 a01e5836 2004-04-21 devnull followed by
391 a01e5836 2004-04-21 devnull .B cont()
392 a01e5836 2004-04-21 devnull to resume execution.
393 a01e5836 2004-04-21 devnull .SH EXAMPLES
394 a01e5836 2004-04-21 devnull Start to debug
395 a01e5836 2004-04-21 devnull .BR /bin/ls ;
396 a01e5836 2004-04-21 devnull set some breakpoints; run up to the first one
397 a01e5836 2004-04-21 devnull (this example doesn't work on Unix yet):
398 a01e5836 2004-04-21 devnull .IP
399 a01e5836 2004-04-21 devnull .EX
400 a01e5836 2004-04-21 devnull % acid /bin/ls
401 a01e5836 2004-04-21 devnull /bin/ls: mips plan 9 executable
402 a01e5836 2004-04-21 devnull /sys/lib/acid/port
403 a01e5836 2004-04-21 devnull /sys/lib/acid/mips
404 a01e5836 2004-04-21 devnull acid: new()
405 a01e5836 2004-04-21 devnull 70094: system call _main ADD $-0x14,R29
406 a01e5836 2004-04-21 devnull 70094: breakpoint main+0x4 MOVW R31,0x0(R29)
407 a01e5836 2004-04-21 devnull acid: pid
408 a01e5836 2004-04-21 devnull 70094
409 a01e5836 2004-04-21 devnull acid: argv0 = **main:argv\es
410 a01e5836 2004-04-21 devnull acid: whatis argv0
411 a01e5836 2004-04-21 devnull integer variable format s
412 a01e5836 2004-04-21 devnull acid: *argv0
413 a01e5836 2004-04-21 devnull /bin/ls
414 a01e5836 2004-04-21 devnull acid: bpset(ls)
415 a01e5836 2004-04-21 devnull acid: cont()
416 a01e5836 2004-04-21 devnull 70094: breakpoint ls ADD $-0x16c8,R29
417 bfe4377e 2020-05-19 rsc acid:
418 a01e5836 2004-04-21 devnull .EE
419 a01e5836 2004-04-21 devnull .PP
420 a01e5836 2004-04-21 devnull Display elements of a linked list of structures:
421 a01e5836 2004-04-21 devnull .IP
422 a01e5836 2004-04-21 devnull .EX
423 a01e5836 2004-04-21 devnull complex Str { 'D' 0 val; 'X' 4 next; };
424 a01e5836 2004-04-21 devnull s = *headstr;
425 a01e5836 2004-04-21 devnull while s != 0 do{
426 a01e5836 2004-04-21 devnull complex Str s;
427 a01e5836 2004-04-21 devnull print(s.val, "\en");
428 a01e5836 2004-04-21 devnull s = s.next;
429 a01e5836 2004-04-21 devnull }
430 a01e5836 2004-04-21 devnull .EE
431 a01e5836 2004-04-21 devnull .PP
432 a01e5836 2004-04-21 devnull Note the use of the
433 a01e5836 2004-04-21 devnull .B .
434 a01e5836 2004-04-21 devnull operator instead of
435 a01e5836 2004-04-21 devnull .BR -> .
436 a01e5836 2004-04-21 devnull .PP
437 a01e5836 2004-04-21 devnull Display an array of bytes declared in C as
438 a01e5836 2004-04-21 devnull .BR "char array[]" .
439 a01e5836 2004-04-21 devnull .IP
440 a01e5836 2004-04-21 devnull .EX
441 a01e5836 2004-04-21 devnull *(array\es)
442 a01e5836 2004-04-21 devnull .EE
443 a01e5836 2004-04-21 devnull .PP
444 a01e5836 2004-04-21 devnull This example gives
445 a01e5836 2004-04-21 devnull .B array
446 a01e5836 2004-04-21 devnull string format, then prints the string beginning at the address (in
447 a01e5836 2004-04-21 devnull .I acid
448 a01e5836 2004-04-21 devnull notation)
449 a01e5836 2004-04-21 devnull .BR *array .
450 a01e5836 2004-04-21 devnull .PP
451 a01e5836 2004-04-21 devnull Trace the system calls executed by
452 d32deab1 2020-08-16 rsc .MR ls (1)
453 a01e5836 2004-04-21 devnull (neither does this one):
454 a01e5836 2004-04-21 devnull .IP
455 a01e5836 2004-04-21 devnull .EX
456 a01e5836 2004-04-21 devnull % acid -l truss /bin/ls
457 a01e5836 2004-04-21 devnull /bin/ls:386 plan 9 executable
458 a01e5836 2004-04-21 devnull
459 a01e5836 2004-04-21 devnull /sys/lib/acid/port
460 a01e5836 2004-04-21 devnull /sys/lib/acid/kernel
461 a01e5836 2004-04-21 devnull /sys/lib/acid/truss
462 a01e5836 2004-04-21 devnull /sys/lib/acid/386
463 a01e5836 2004-04-21 devnull acid: progargs = "-l lib/profile"
464 a01e5836 2004-04-21 devnull acid: new()
465 a01e5836 2004-04-21 devnull acid: truss()
466 a01e5836 2004-04-21 devnull open("#c/pid", 0)
467 a01e5836 2004-04-21 devnull return value: 3
468 a01e5836 2004-04-21 devnull pread(3, 0x7fffeeac, 20, -1)
469 a01e5836 2004-04-21 devnull return value: 12
470 a01e5836 2004-04-21 devnull data: " 166 "
471 a01e5836 2004-04-21 devnull \&...
472 a01e5836 2004-04-21 devnull stat("lib/profile", 0x0000f8cc, 113)
473 a01e5836 2004-04-21 devnull return value: 65
474 a01e5836 2004-04-21 devnull open("/env/timezone", 0)
475 a01e5836 2004-04-21 devnull return value: 3
476 a01e5836 2004-04-21 devnull pread(3, 0x7fffd7c4, 1680, -1)
477 a01e5836 2004-04-21 devnull return value: 1518
478 a01e5836 2004-04-21 devnull data: "EST -18000 EDT -14400
479 a01e5836 2004-04-21 devnull 9943200 25664400 41392800 57718800 73447200 89168400
480 a01e5836 2004-04-21 devnull 104896800 ..."
481 a01e5836 2004-04-21 devnull close(3)
482 a01e5836 2004-04-21 devnull return value: 0
483 a01e5836 2004-04-21 devnull pwrite(1, "--rw-rw-r-- M 9 rob rob 2519 Mar 22 10:29 lib/profile
484 a01e5836 2004-04-21 devnull ", 54, -1)
485 a01e5836 2004-04-21 devnull --rw-rw-r-- M 9 rob rob 2519 Mar 22 10:29 lib/profile
486 a01e5836 2004-04-21 devnull return value: 54
487 a01e5836 2004-04-21 devnull \&...
488 a01e5836 2004-04-21 devnull 166: breakpoint _exits+0x5 INTB $0x40
489 a01e5836 2004-04-21 devnull acid: cont()
490 a01e5836 2004-04-21 devnull .EE
491 a01e5836 2004-04-21 devnull .SH FILES
492 c3674de4 2005-01-11 devnull .B \*9/acid/$objtype
493 a01e5836 2004-04-21 devnull .br
494 c3674de4 2005-01-11 devnull .B \*9/acid/port
495 a01e5836 2004-04-21 devnull .br
496 c3674de4 2005-01-11 devnull .B \*9/acid/kernel
497 a01e5836 2004-04-21 devnull .br
498 c3674de4 2005-01-11 devnull .B \*9/acid/trump
499 a01e5836 2004-04-21 devnull .br
500 c3674de4 2005-01-11 devnull .B \*9/acid/truss
501 c3674de4 2005-01-11 devnull .br
502 bfe4377e 2020-05-19 rsc .B $HOME/lib/acid
503 a01e5836 2004-04-21 devnull .SH SOURCE
504 c3674de4 2005-01-11 devnull .B \*9/src/cmd/acid
505 a01e5836 2004-04-21 devnull .SH "SEE ALSO"
506 d32deab1 2020-08-16 rsc .MR mk (1) ,
507 d32deab1 2020-08-16 rsc .MR db (1)
508 a01e5836 2004-04-21 devnull .br
509 a01e5836 2004-04-21 devnull Phil Winterbottom,
510 a01e5836 2004-04-21 devnull ``Acid Manual''.
511 a01e5836 2004-04-21 devnull .SH DIAGNOSTICS
512 a01e5836 2004-04-21 devnull At termination, kill commands are proposed
513 a01e5836 2004-04-21 devnull for processes that are still active.
514 a01e5836 2004-04-21 devnull .SH BUGS
515 a01e5836 2004-04-21 devnull There is no way to redirect the standard input and standard output
516 a01e5836 2004-04-21 devnull of a new process.
517 c8b6342d 2005-01-13 devnull .PP
518 a01e5836 2004-04-21 devnull Source line selection near the beginning of a file may pick
519 a01e5836 2004-04-21 devnull an adjacent file.
520 c8b6342d 2005-01-13 devnull .PP
521 a01e5836 2004-04-21 devnull With the extant stepping commands, one cannot step through instructions
522 a01e5836 2004-04-21 devnull outside the text segment and it is hard to debug across process forks.
523 c8b6342d 2005-01-13 devnull .PP
524 a01e5836 2004-04-21 devnull Breakpoints do not work yet.
525 a01e5836 2004-04-21 devnull Therefore, commands such as
526 a01e5836 2004-04-21 devnull .BR step ,
527 a01e5836 2004-04-21 devnull .BR new ,
528 a01e5836 2004-04-21 devnull and
529 a01e5836 2004-04-21 devnull .B truss
530 a01e5836 2004-04-21 devnull do not work either.
531 a01e5836 2004-04-21 devnull .B New
532 a01e5836 2004-04-21 devnull in particular will need some help to cope with dynamic libraries.