Provided by: manpages-zh_1.6.3.3-2_all bug

NAME

       trace - 监视变量访问

总览 SYNOPSIS

       trace option ?arg arg ...?
_________________________________________________________________

描述 DESCRIPTION

       这个命令导致在调用了特定操作的时候执行   Tcl   命令。现在只实现了变量跟踪。合法的   option
       (选项) (可以是缩写)有:

       trace variable name ops command
              安排   command    在变量    name    被以用    ops    给出的方式访问的时候执行。Name
              可以引用一个普通变量、数组的一个元素,或整个的一个数组(就是说,name
              可以只是一个数组的名字,而不加在圆括号中的索引)。如果                          name
              引用整个的一个数组,则在操纵了这个数组的任何元素的时候调用                  command
              。如果这个变量不存在,则建立它但不给它值,所以对        namespace             which
              查询是可见的,但对 info exists     不是。

              Ops     指示要进行何种操作,它由下列字母中的一个或多个组成:

              r      在读这个变量的时候调用 commandw      在写这个变量的时候调用 commandu      在删除这个变量的时候调用               command。可以使用               unset
                     命令显式的删除变量,或者在过程返回的时候隐式的删除(所有它们的局部变量)。在删除解释器的时候也删除变量,因为没有在其中执行命令的解释器所以不调用跟踪。

              当触发跟踪的时候,向 command     添加三个参数,所以实际上的命令如下:
                     command name1 name2 op
              Name1name2   给出被访问了的变量的名字:      如果这个变量是个标量,则  name1
              给出变量的名字而     name2         是一个空串;如果变量是一个数组元素,则     name1
              给出数组的名字而                                                              name2
              给出在这个数组中的索引;如果整个数组被删除并且跟踪注册在整个数组上,而不是在一个单一元素上,则
              name1  给出这个数组的名字而 name2 是一个空串。Name1name2 不是必须与在 trace
              variable                          命令中使用的名字相同:                       upvar
              命令允许一个过程在不同的名字下引用一个变量。Op
              指示在这个变量上进行了何种操作,它是上面定义的 rw、或     u 中的一个。

              Command     在与调用跟踪操作的代码的相同的上下文中执行:      如果被访问的变量是一个
              Tcl                             过程的一部分,则                            command
              将访问到与过程中的代码相同的局部变量。这个上下文可能与在其中建立跟踪的上下文不同。如果
              command 调用一个过程(它经常这么做),则过程要想访问被跟踪的变量必须使用     upvaruplevel。还要注意                                                             name1
              不是必须与用来在变量上设置跟踪的那个名字相同;如果通过用                      upvar
              定义的一个变量进行访问,则可能发生不同。

              对于读和写跟踪,command           可以修改变量来影响被跟踪的操作的结果。如果command
              在读写跟踪期间修改了一个变量的值,则这个新值将被返回为跟踪操作的结果。除非从
              command
              返回的值是一个某种错误,此时跟踪的操作返回的错误与跟踪命令返回的错误消息相同,否则忽略它(例如,可使用这种机制实现只读变量)。对于写跟踪,在这个变量的值被改变之后调用
              command
              ;它把一个新值写到这个变量中来屏弃在这次写操作中指定的原始值。要实现只读变量,command
              必须存储这个变量的旧值。

              当  command      在一个读或写跟踪期间执行的时候,在变量上的跟踪被暂时禁用。这意味着
              command                 调用的读和写将直接发生,不用再次调用                command
              (或任何其他跟踪)。但是,如果 command     删除了这个变量则调用删除跟踪。

              在调用一个删除跟踪的时候,这个变量已经被删除了:
              它将出现为未定义的而不加以跟踪。如果因为一个过程返回而发生一个删除,则在返回到的那个过程的变量上下文中调用跟踪:
              返回的过程的栈桢已经不存在了。在删除跟踪期间不禁止跟踪,所以如果一个删除跟踪命令建立了一个新的跟踪并访问了这个变量,则调用这个跟踪。忽略删除跟踪的任何错误。

              如果在一个变量上有多个跟踪,则以建立的次序调用它们,先处理最新的。如果一个跟踪返回一个错误,则不对这个变量调用进一步的跟踪。如果一个数组元素有一个跟踪设置,并且还有一个在整个数组上的跟踪设置,调用在整个数组上的跟踪先于在这个元素上的跟踪。

              一旦建立了,跟踪保持有效直到用下面描述的               trace                vdelete
              命令删除这个跟踪、直到删除了这个变量,或直到删除了这个解释器为止。删除数组的一个元素将删除在这个元素上的任何跟踪,但不删除在整个数组上的跟踪。

              这个命令返回一个空串。

       trace vdelete name ops command
              如果在变量     name      上设置了一个用      ops          给出操作和用      command
              给出命令的跟踪,则删除这个跟踪,这样将永不再次调用 command     。返回一个空串。

       trace vinfo name
              返回一个列表,为每个在变量                                                     name
              设置的当前跟踪包含一个元素。这个列表的每个元素自身是一个包含两个元素的列表,它们是与这个跟踪相关的
              opscommand 。如果 name     不存在或没有跟踪设置,则命令的结果是一个空串。

关键字 KEYWORDS

       read, variable, write, trace, unset

[中文版维护人]

       寒蝉退士

[中文版最新更新]

       2001/11/21

《中国 Linux 论坛 man 手册页翻译计划》:

       http://cmpp.linuxforum.net

       本页面中文版由中文 man 手册页计划提供。
       中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh