Provided by:
manpages-zh_1.5.1-1_all 
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的時埣掍 command。
w 在寫這蚥僆q的時埣掍 command。
u 在刪除這蚥僆q的時埣掍 command。可以使用 unset
命令顯式的刪除變量,或者在過程返回的時埡籉〞漣R除(所有它-
怐漣蔔ˍ僆q)。在刪除解釋器的時-
啎]刪除變量,因為沒有在其中執行命令的解釋器所以不調用跟蹤。
當觸發跟蹤的時唌A向 command 添加三-
荌捊A所以實際上的命令如下:
command name1 name2 op
Name1 和 name2 給出被訪問了的變量的名字: 如果這蚥僆q是-
蚍迠q,則 name1 給出變量的名字而 name2 是一-
茠臟瞗F如果變量是一蚍掑葛嚏A則 name1 給出數組的名字而
name2 給出在這蚍掑云滲薑煄F如果整-
蚍梜Q刪除並且跟蹤注冊在整蚍掑W,而不是在一茬璊@元素上,則
name1 給出這蚍晡漲W字而 name2 是一茠臟瞗CName1 和 name2
不是必須與在 trace variable 命令中使用的名字相同: upvar
命令允酗@蚢L程在不同的名字下引用一蚥僆q。Op 指示在這-
蚥僆q上進行了何種操作,它是上惟w義的 r、w、或 u 中的一荂C
Command 在與調用跟蹤操作的代碼的相同的上下文中執行:
如果被訪問的變量是一 Tcl 過程的一部分,則 command
將訪問到與過程中的代碼相同的局部變量。這-
茪W下文可能與在其中建立跟蹤的上下文不同。如果 command
調用一蚢L程(它經常這麼做),則過程n想訪問被跟蹤的變量必須使用
upvar 或 uplevel。還n注意 name1
不是必須與用來在變量上設置跟蹤的那茼W字相同;如果通過用
upvar 定義的一蚥僆q進行訪問,則可能發生不同。
對於讀和寫跟蹤,command 可以-
蚹幭僆q來影響被跟蹤的操作的結果。如果command 在讀寫跟蹤期間-
蚹鴾F一蚥僆q的A則這虓sN被返回為跟蹤操作的結果。除非從
command 返回的O一-
茯Y種錯誤,此時跟蹤的操作返回的錯誤與跟蹤命令返回的錯誤消息相同,否則忽略它(例如,可使用這種機制實現只讀變量)。對於寫跟蹤,在這-
蚥僆q的Q改變之後調用 command ;它把一虓sg到這-
蚥僆q中來屏棄在這次寫操作中指定的鴝lCn實現只讀變量,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與這虒臕頇袺鰝
ops 和 command 。如果 name
不存在或沒有跟蹤設置,則命令的結果是一茠臟瞗C
r KEYWORDS
read, variable, write, trace, unset
[]
Hhh
[]
2001/11/21
m Linux manUpn:
http://cmpp.linuxforum.net