bionic (3) trace.3tcl.gz

Provided by: manpages-zh_1.6.3.2-1_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