Provided by: manpages-zh_1.5.1-1_all bug

NAME

       trace - 監視變量訪問

` SYNOPSIS
       trace option ?arg arg ...?
_________________________________________________________________

yz DESCRIPTION
       這茤R令導P在調用了特定操作的時埶鶡                                 Tcl
       命令。現在只實現了變量跟蹤。合法的 option (選項) (可以是縮寫)有:

       trace variable name ops command
              安排  command  在變量  name   被以用   ops   給出的方式訪問的時-
              埶鶡獢CName       可以引用一荋雲q變量、數組的一茪葛嚏A或整茠漱@-
              蚍(就是說,name                                   可以只是一-
              蚍晡漲W字,而不加在圓括號中的索引)。如果      name     引用整-
              茠漱@蚍捸A則在操縱了這蚍晡漸籉韝葛尷漁尕調用         command
              。如果這蚥僆q不存在,則建立它但不給它A所以對         namespace
              which 查詢是可見的,但對 info exists     不是。

              Ops     指示n進行何種操作,它由下列字母中的一茤峖h茞捰:

              r      在讀這蚥僆q的時埣掍 commandw      在寫這蚥僆q的時埣掍 commandu      在刪除這蚥僆q的時埣掍      command。可以使用       unset
                     命令顯式的刪除變量,或者在過程返回的時埡籉〞漣R除(所有它-
                     怐漣蔔ˍ僆q)。在刪除解釋器的時-
                     啎]刪除變量,因為沒有在其中執行命令的解釋器所以不調用跟蹤。

              當觸發跟蹤的時唌A向             command                  添加三-
              荌捊A所以實際上的命令如下:
                     command name1 name2 op
              Name1name2  給出被訪問了的變量的名字:      如果這蚥僆q是-
              蚍迠q,則     name1     給出變量的名字而     name2         是一-
              茠臟瞗F如果變量是一蚍掑葛嚏A則    name1       給出數組的名字而
              name2                             給出在這蚍掑云滲薑煄F如果整-
              蚍梜Q刪除並且跟蹤注冊在整蚍掑W,而不是在一茬璊@元素上,則
              name1 給出這蚍晡漲W字而 name2  是一茠臟瞗CName1name2
              不是必須與在   trace  variable      命令中使用的名字相同:  upvar
              命令允酗@蚢L程在不同的名字下引用一蚥僆q。Op            指示在這-
              蚥僆q上進行了何種操作,它是上惟w義的 rw、或     u 中的一荂C

              Command              在與調用跟蹤操作的代碼的相同的上下文中執行:
              如果被訪問的變量是一     Tcl      過程的一部分,則      command
              將訪問到與過程中的代碼相同的局部變量。這-
              茪W下文可能與在其中建立跟蹤的上下文不同。如果            command
              調用一蚢L程(它經常這麼做),則過程n想訪問被跟蹤的變量必須使用
              upvaruplevel。還n注意               name1
              不是必須與用來在變量上設置跟蹤的那茼W字相同;如果通過用
              upvar     定義的一蚥僆q進行訪問,則可能發生不同。

              對於讀和寫跟蹤,command                                    可以-
              蚹幭僆q來影響被跟蹤的操作的結果。如果command     在讀寫跟蹤期間-
              蚹鴾F一蚥僆q的A則這虓sN被返回為跟蹤操作的結果。除非從
              command                                             返回的O一-
              茯Y種錯誤,此時跟蹤的操作返回的錯誤與跟蹤命令返回的錯誤消息相同,否則忽略它(例如,可使用這種機制實現只讀變量)。對於寫跟蹤,在這-
              蚥僆q的Q改變之後調用        command        ;它把一虓sg到這-
              蚥僆q中來屏棄在這次寫操作中指定的鴝lCn實現只讀變量,command
              必須存儲這蚥僆q的舊C

              當            command               在一蚥版弮g跟蹤期間執行的時-
              唌A在變量上的跟蹤被暫時禁用。這意味著                    command
              調用的讀和寫將直接發生,不用再次調用                     command
              (或任何其他跟蹤)。但是,如果        command            刪除了這-
              蚥僆q則調用刪除跟蹤。

              在調用一荍R除跟蹤的時唌A這蚥僆q已經被刪除了:
              它將出現為未定義的而不加以跟蹤。如果因為一蚢L程返回而發生一-
              荍R除,則在返回到的那蚢L程的變量上下文中調用跟蹤:
              返回的過程的棧楨已經不存在了。在刪除跟蹤期間不禁止跟蹤,所以如果一-
              荍R除跟蹤命令建立了一虓s的跟蹤並訪問了這蚥僆q,則調用這-
              虒臕隉C忽略刪除跟蹤的任何錯誤。

              如果在一蚥僆q上有多虒臕隉A則以建立的次序調用它-
              怴A先處理最新的。如果一虒臕靰藀^一蚇欞~,則不對這-
              蚥僆q調用進一步的跟蹤。如果一蚍掑葛嬰酗@虒臕亶]置,並且還有一-
              茼b整蚍掑W的跟蹤設置,調用在整蚍掑W的跟蹤先於在這-
              茪葛壑W的跟蹤。

              一旦建立了,跟蹤保持有效直到用下探yz的 trace vdelete 命令刪除這-
              虒臕隉B直到刪除了這蚥僆q,或直到刪除了這-
              虒挭擰僧陘謘C刪除數組的一茪葛彌N刪除在這-
              茪葛壑W的任何跟蹤,但不刪除在整蚍掑W的跟蹤。

              這茤R令返回一茠臟瞗C

       trace vdelete name ops command
              如果在變量   name  上設置了一茈  ops      給出操作和用  command
              給出命令的跟蹤,則刪除這虒臕隉A這樣將永不再次調用        command
              。返回一茠臟瞗C

       trace vinfo name
              返回一茼C表,為每茼b變量   name   設置的當前跟蹤包含一茪葛嚏C這-
              茼C表的每茪葛嬰菬是一茈]含兩茪葛尷漲C表,它怓O與這虒臕頇袺鰝
              opscommand          。如果          name
              不存在或沒有跟蹤設置,則命令的結果是一茠臟瞗C

r KEYWORDS
       read, variable, write, trace, unset

[]
      Hhh

[]
       2001/11/21

m Linux manUpn:
       http://cmpp.linuxforum.net