update NEWS
[manpages-zh.git] / raw / mann / trace.n
blobea010a4e92ec99d989988a563300d0168acc612e
1 '\"
2 '\" Copyright (c) 1993 The Regents of the University of California.
3 '\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
4 '\"
5 '\" See the file "license.terms" for information on usage and redistribution
6 '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
7 '\"
8 '\" RCS: @(#) $Id: trace.n,v 1.1 2003/12/20 03:31:54 bbbush Exp $
9 '\"
10 '\" The definitions below are for supplemental macros used in Tcl/Tk
11 '\" manual entries.
12 '\"
13 '\" .AP type name in/out ?indent?
14 '\" Start paragraph describing an argument to a library procedure.
15 '\" type is type of argument (int, etc.), in/out is either "in", "out",
16 '\" or "in/out" to describe whether procedure reads or modifies arg,
17 '\" and indent is equivalent to second arg of .IP (shouldn't ever be
18 '\" needed; use .AS below instead)
19 '\"
20 '\" .AS ?type? ?name?
21 '\" Give maximum sizes of arguments for setting tab stops. Type and
22 '\" name are examples of largest possible arguments that will be passed
23 '\" to .AP later. If args are omitted, default tab stops are used.
24 '\"
25 '\" .BS
26 '\" Start box enclosure. From here until next .BE, everything will be
27 '\" enclosed in one large box.
28 '\"
29 '\" .BE
30 '\" End of box enclosure.
31 '\"
32 '\" .CS
33 '\" Begin code excerpt.
34 '\"
35 '\" .CE
36 '\" End code excerpt.
37 '\"
38 '\" .VS ?version? ?br?
39 '\" Begin vertical sidebar, for use in marking newly-changed parts
40 '\" of man pages. The first argument is ignored and used for recording
41 '\" the version when the .VS was added, so that the sidebars can be
42 '\" found and removed when they reach a certain age. If another argument
43 '\" is present, then a line break is forced before starting the sidebar.
44 '\"
45 '\" .VE
46 '\" End of vertical sidebar.
47 '\"
48 '\" .DS
49 '\" Begin an indented unfilled display.
50 '\"
51 '\" .DE
52 '\" End of indented unfilled display.
53 '\"
54 '\" .SO
55 '\" Start of list of standard options for a Tk widget. The
56 '\" options follow on successive lines, in four columns separated
57 '\" by tabs.
58 '\"
59 '\" .SE
60 '\" End of list of standard options for a Tk widget.
61 '\"
62 '\" .OP cmdName dbName dbClass
63 '\" Start of description of a specific option. cmdName gives the
64 '\" option's name as specified in the class command, dbName gives
65 '\" the option's name in the option database, and dbClass gives
66 '\" the option's class in the option database.
67 '\"
68 '\" .UL arg1 arg2
69 '\" Print arg1 underlined, then print arg2 normally.
70 '\"
71 '\" RCS: @(#) $Id: trace.n,v 1.1 2003/12/20 03:31:54 bbbush Exp $
72 '\"
73 '\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
74 .if t .wh -1.3i ^B
75 .nr ^l \n(.l
76 .ad b
77 '\" # Start an argument description
78 .de AP
79 .ie !"\\$4"" .TP \\$4
80 .el \{\
81 . ie !"\\$2"" .TP \\n()Cu
82 . el .TP 15
83 .\}
84 .ta \\n()Au \\n()Bu
85 .ie !"\\$3"" \{\
86 \&\\$1 \\fI\\$2\\fP (\\$3)
87 .\".b
88 .\}
89 .el \{\
90 .br
91 .ie !"\\$2"" \{\
92 \&\\$1 \\fI\\$2\\fP
93 .\}
94 .el \{\
95 \&\\fI\\$1\\fP
96 .\}
97 .\}
99 '\" # define tabbing values for .AP
100 .de AS
101 .nr )A 10n
102 .if !"\\$1"" .nr )A \\w'\\$1'u+3n
103 .nr )B \\n()Au+15n
105 .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
106 .nr )C \\n()Bu+\\w'(in/out)'u+2n
108 .AS Tcl_Interp Tcl_CreateInterp in/out
109 '\" # BS - start boxed text
110 '\" # ^y = starting y location
111 '\" # ^b = 1
112 .de BS
114 .mk ^y
115 .nr ^b 1u
116 .if n .nf
117 .if n .ti 0
118 .if n \l'\\n(.lu\(ul'
119 .if n .fi
121 '\" # BE - end boxed text (draw box now)
122 .de BE
124 .ti 0
125 .mk ^t
126 .ie n \l'\\n(^lu\(ul'
127 .el \{\
128 .\" Draw four-sided box normally, but don't draw top of
129 .\" box if the box started on an earlier page.
130 .ie !\\n(^b-1 \{\
131 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
133 .el \}\
134 \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
139 .nr ^b 0
141 '\" # VS - start vertical sidebar
142 '\" # ^Y = starting y location
143 '\" # ^v = 1 (for troff; for nroff this doesn't matter)
144 .de VS
145 .if !"\\$2"" .br
146 .mk ^Y
147 .ie n 'mc \s12\(br\s0
148 .el .nr ^v 1u
150 '\" # VE - end of vertical sidebar
151 .de VE
152 .ie n 'mc
153 .el \{\
154 .ev 2
156 .ti 0
157 .mk ^t
158 \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
159 .sp -1
163 .nr ^v 0
165 '\" # Special macro to handle page bottom: finish off current
166 '\" # box/sidebar if in box/sidebar mode, then invoked standard
167 '\" # page bottom macro.
168 .de ^B
169 .ev 2
170 'ti 0
172 .mk ^t
173 .if \\n(^b \{\
174 .\" Draw three-sided box if this is the box's first page,
175 .\" draw two sides but no top otherwise.
176 .ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
177 .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
179 .if \\n(^v \{\
180 .nr ^x \\n(^tu+1v-\\n(^Yu
181 \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
186 .if \\n(^b \{\
187 .mk ^y
188 .nr ^b 2
190 .if \\n(^v \{\
191 .mk ^Y
194 '\" # DS - begin display
195 .de DS
200 '\" # DE - end display
201 .de DE
206 '\" # SO - start of list of standard options
207 .de SO
208 .SH "STANDARD OPTIONS"
211 .ta 5.5c 11c
212 .ft B
214 '\" # SE - end of list of standard options
215 .de SE
217 .ft R
219 See the \\fBoptions\\fR manual entry for details on the standard options.
221 '\" # OP - start of full description for a single option
222 .de OP
225 .ta 4c
226 Command-Line Name: \\fB\\$1\\fR
227 Database Name: \\fB\\$2\\fR
228 Database Class: \\fB\\$3\\fR
232 '\" # CS - begin code excerpt
233 .de CS
236 .ta .25i .5i .75i 1i
238 '\" # CE - end code excerpt
239 .de CE
243 .de UL
244 \\$1\l'|0\(ul'\\$2
246 .TH trace n "" Tcl "Tcl Built-In Commands"
248 '\" Note: do not modify the .SH NAME line immediately below!
249 .SH NAME
250 trace \- Monitor variable accesses
251 .SH SYNOPSIS
252 \fBtrace \fIoption\fR ?\fIarg arg ...\fR?
255 .SH DESCRIPTION
257 This command causes Tcl commands to be executed whenever certain operations are
258 invoked. At present, only variable tracing is implemented. The
259 legal \fIoption\fR's (which may be abbreviated) are:
261 \fBtrace variable \fIname ops command\fR
262 Arrange for \fIcommand\fR to be executed whenever variable \fIname\fR
263 is accessed in one of the ways given by \fIops\fR. \fIName\fR may
264 refer to a normal variable, an element of an array, or to an array
265 as a whole (i.e. \fIname\fR may be just the name of an array, with no
266 parenthesized index). If \fIname\fR refers to a whole array, then
267 \fIcommand\fR is invoked whenever any element of the array is
268 manipulated. If the variable does not exist, it will be created but
269 will not be given a value, so it will be visible to \fBnamespace which\fR
270 queries, but not to \fBinfo exists\fR queries.
273 \fIOps\fR indicates which operations are of interest, and consists of
274 one or more of the following letters:
276 \fBr\fR
277 Invoke \fIcommand\fR whenever the variable is read.
279 \fBw\fR
280 Invoke \fIcommand\fR whenever the variable is written.
282 \fBu\fR
283 Invoke \fIcommand\fR whenever the variable is unset. Variables
284 can be unset explicitly with the \fBunset\fR command, or
285 implicitly when procedures return (all of their local variables
286 are unset). Variables are also unset when interpreters are
287 deleted, but traces will not be invoked because there is no
288 interpreter in which to execute them.
290 When the trace triggers, three arguments are appended to
291 \fIcommand\fR so that the actual command is as follows:
293 \fIcommand name1 name2 op\fR
295 \fIName1\fR and \fIname2\fR give the name(s) for the variable
296 being accessed: if the variable is a scalar then \fIname1\fR
297 gives the variable's name and \fIname2\fR is an empty string;
298 if the variable is an array element then \fIname1\fR gives the
299 name of the array and name2 gives the index into the array;
300 if an entire array is being deleted and the trace was registered
301 on the overall array, rather than a single element, then \fIname1\fR
302 gives the array name and \fIname2\fR is an empty string.
303 \fIName1\fR and \fIname2\fR are not necessarily the same as the
304 name used in the \fBtrace variable\fR command: the \fBupvar\fR
305 command allows a procedure to reference a variable under a
306 different name.
307 \fIOp\fR indicates what operation is being performed on the
308 variable, and is one of \fBr\fR, \fBw\fR, or \fBu\fR as
309 defined above.
311 \fICommand\fR executes in the same context as the code that invoked
312 the traced operation: if the variable was accessed as part of a
313 Tcl procedure, then \fIcommand\fR will have access to the same
314 local variables as code in the procedure. This context may be
315 different than the context in which the trace was created.
316 If \fIcommand\fR invokes a procedure (which it normally does) then
317 the procedure will have to use \fBupvar\fR or \fBuplevel\fR if it
318 wishes to access the traced variable.
319 Note also that \fIname1\fR may not necessarily be the same as the name
320 used to set the trace on the variable; differences can occur if
321 the access is made through a variable defined with the \fBupvar\fR
322 command.
324 For read and write traces, \fIcommand\fR can modify
325 the variable to affect the result of the traced operation.
326 If \fIcommand\fR modifies the value of a variable during a
327 read or write trace, then the new value will be returned as the
328 result of the traced operation.
329 The return value from \fIcommand\fR is ignored except that
330 if it returns an error of any sort then the traced operation
331 also returns an error with
332 the same error message returned by the trace command
333 (this mechanism can be used to implement read-only variables, for
334 example).
335 For write traces, \fIcommand\fR is invoked after the variable's
336 value has been changed; it can write a new value into the variable
337 to override the original value specified in the write operation.
338 To implement read-only variables, \fIcommand\fR will have to restore
339 the old value of the variable.
341 While \fIcommand\fR is executing during a read or write trace, traces
342 on the variable are temporarily disabled.
343 This means that reads and writes invoked by
344 \fIcommand\fR will occur directly, without invoking \fIcommand\fR
345 (or any other traces) again.
346 However, if \fIcommand\fR unsets the variable then unset traces
347 will be invoked.
349 When an unset trace is invoked, the variable has already been
350 deleted: it will appear to be undefined with no traces.
351 If an unset occurs because of a procedure return, then the
352 trace will be invoked in the variable context of the procedure
353 being returned to: the stack frame of the returning procedure
354 will no longer exist.
355 Traces are not disabled during unset traces, so if an unset trace
356 command creates a new trace and accesses the variable, the
357 trace will be invoked.
358 Any errors in unset traces are ignored.
360 If there are multiple traces on a variable they are invoked
361 in order of creation, most-recent first.
362 If one trace returns an error, then no further traces are
363 invoked for the variable.
364 If an array element has a trace set, and there is also a trace
365 set on the array as a whole, the trace on the overall array
366 is invoked before the one on the element.
368 Once created, the trace remains in effect either until the
369 trace is removed with the \fBtrace vdelete\fR command described
370 below, until the variable is unset, or until the interpreter
371 is deleted.
372 Unsetting an element of array will remove any traces on that
373 element, but will not remove traces on the overall array.
375 This command returns an empty string.
378 \fBtrace vdelete \fIname ops command\fR
379 If there is a trace set on variable \fIname\fR with the
380 operations and command given by \fIops\fR and \fIcommand\fR,
381 then the trace is removed, so that \fIcommand\fR will never
382 again be invoked.
383 Returns an empty string.
385 \fBtrace vinfo \fIname\fR
386 Returns a list containing one element for each trace
387 currently set on variable \fIname\fR.
388 Each element of the list is itself a list containing two
389 elements, which are the \fIops\fR and \fIcommand\fR associated
390 with the trace.
391 If \fIname\fR doesn't exist or doesn't have any traces set, then
392 the result of the command will be an empty string.
394 .SH KEYWORDS
395 read, variable, write, trace, unset