table of contents
other languages
- English tcl8.5-doc
- English tcl8.6-doc
- 中文 (zh-CN)
- 繁體中文 (zh-TW)
other sections
trace(3tcl) | Tcl Built-In Commands | trace(3tcl) |
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
指示要進行何種操作,它由下列字母中的一個或多個組成:
Name1 和 name2
給出被訪問了的變量的名字:
如果這個變量是個標量,則
name1 給出變量的名字而
name2
是一個空串;如果變量是一個數組元素,則
name1 給出數組的名字而
name2
給出在這個數組中的索引;如果整個數組被刪除並且跟蹤注冊在整個數組上,而不是在一個單一元素上,則
name1
給出這個數組的名字而
name2 是一個空串。Name1
和 name2 不是必須與在
trace variable
命令中使用的名字相同:
upvar
命令允許一個過程在不同的名字下引用一個變量。
Op
指示在這個變量上進行了何種操作,它是上面定義的
r、w、或 u
中的一個。
Command
在與調用跟蹤操作的代碼的相同的上下文中執行:
如果被訪問的變量是一個
Tcl 過程的一部分,則
command
將訪問到與過程中的代碼相同的局部變量。這個上下文可能與在其中建立跟蹤的上下文不同。如果
command
調用一個過程(它經常這麼做),則過程要想訪問被跟蹤的變量必須使用
upvar 或 uplevel。還要注意
name1
不是必須與用來在變量上設置跟蹤的那個名字相同;如果通過用
upvar
定義的一個變量進行訪問,則可能發生不同。
對於讀和寫跟蹤, command
可以修改變量來影響被跟蹤的操作的結果。如果
command
在讀寫跟蹤期間修改了一個變量的值,則這個新值將被返回為跟蹤操作的結果。除非從
command
返回的值是一個某種錯誤,此時跟蹤的操作返回的錯誤與跟蹤命令返回的錯誤消息相同,否則忽略它(例如,可使用這種機制實現只讀變量)。對於寫跟蹤,在這個變量的值被改變之後調用
command
;它把一個新值寫到這個變量中來屏棄在這次寫操作中指定的原始值。要實現只讀變量,
command
必須存儲這個變量的舊值。
當 command
在一個讀或寫跟蹤期間執行的時候,在變量上的跟蹤被暫時禁用。這意味著
command
調用的讀和寫將直接發生,不用再次調用
command
(或任何其他跟蹤)。但是,如果
command
刪除了這個變量則調用刪除跟蹤。
在調用一個刪除跟蹤的時候,這個變量已經被刪除了:
它將出現為未定義的而不加以跟蹤。如果因為一個過程返回而發生一個刪除,則在返回到的那個過程的變量上下文中調用跟蹤:
返回的過程的棧楨已經不存在了。在刪除跟蹤期間不禁止跟蹤,所以如果一個刪除跟蹤命令建立了一個新的跟蹤並訪問了這個變量,則調用這個跟蹤。忽略刪除跟蹤的任何錯誤。
如果在一個變量上有多個跟蹤,則以建立的次序調用它們,先處理最新的。如果一個跟蹤返回一個錯誤,則不對這個變量調用進一步的跟蹤。如果一個數組元素有一個跟蹤設置,並且還有一個在整個數組上的跟蹤設置,調用在整個數組上的跟蹤先於在這個元素上的跟蹤。
一旦建立了,跟蹤保持有效直到用下面描述的
trace vdelete
命令刪除這個跟蹤、直到刪除了這個變量,或直到刪除了這個解釋器為止。刪除數組的一個元素將刪除在這個元素上的任何跟蹤,但不刪除在整個數組上的跟蹤。
這個命令返回一個空串。
- r
- 在讀這個變量的時候調用 command。
- w
- 在寫這個變量的時候調用 command。
- u
- 在刪除這個變量的時候調用 command。可以使用 unset 命令顯式的刪除變量,或者在過程返回的時候隱式的刪除(所有它們的局部變量)。在刪除解釋器的時候也刪除變量,因為沒有在其中執行命令的解釋器所以不調用跟蹤。
command name1 name2 op
- trace vdelete name ops command
- 如果在變量 name 上設置了一個用 ops 給出操作和用 command 給出命令的跟蹤,則刪除這個跟蹤,這樣將永不再次調用 command 。返回一個空串。
- trace vinfo name
- 返回一個列表,為每個在變量 name 設置的當前跟蹤包含一個元素。這個列表的每個元素自身是一個包含兩個元素的列表,它們是與這個跟蹤相關的 ops 和 command 。如果 name 不存在或沒有跟蹤設置,則命令的結果是一個空串。
關鍵字 KEYWORDS¶
read, variable, write, trace, unset[中文版維護人]¶
寒蟬退士[中文版最新更新]¶
2001/11/21《中國 Linux 論壇 man 手冊頁翻譯計劃》:¶
http://cmpp.linuxforum.netTcl |