189 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 | ||
| <html>
 | ||
|   <head>
 | ||
|     <title>trace</title>
 | ||
|   </head>
 | ||
|   <body>
 | ||
|     <h1>trace</h1>
 | ||
| 
 | ||
|     <p>Команда отслеживает работу с переменными.</p>
 | ||
| 
 | ||
|     <h2>СИНТАКСИС</h2>
 | ||
| 
 | ||
|     <pre>
 | ||
|       <strong>trace</strong> <em>option</em> ?<em>arg</em> <em>arg</em>...?
 | ||
|     </pre>
 | ||
| 
 | ||
|     <h2>ОПИСАНИЕ</h2> 
 | ||
| 
 | ||
|     <p>Эта команда вызывает выполнение указанных Tcl команда при
 | ||
|       определенных действиях с переменной. Ниже перечислены возможные
 | ||
|       опции команды (допускаются сокращения).</p>
 | ||
| 
 | ||
|     <dl>
 | ||
| 
 | ||
|       <dt><strong>trace</strong> <em>variable</em> <em>name</em> <em>ops</em> 
 | ||
| 	<em>command</em></dt>
 | ||
| 
 | ||
|       <dd><p>Обеспечивает выполнение команды <em>command</em> при
 | ||
| 	  определенных действиях с переменной <em>name</em>. Ниже
 | ||
| 	  перечислены возможные значения аргумента <em>ops</em> и какие
 | ||
| 	  действия с переменной при этом отслеживаются. Аргумент
 | ||
| 	  <em>name</em> может содержать имя простой переменной, имя
 | ||
| 	  элемента массива или имя массива. Если <em>name</em> содержит
 | ||
| 	  имя массива, то команда <em>command</em> выполняется при
 | ||
| 	  соответствующих действиях с любым элементом массива.</p>
 | ||
| 	  <p>Аргумент <em>ops</em> состоит из одной или больше букв,
 | ||
| 	  перечисленных ниже.</p>
 | ||
| 	<table>
 | ||
| 	    <tr>
 | ||
| 	      <td><strong>r</strong></td>
 | ||
| 
 | ||
| 	      <td>Вызывает команду command при чтении переменной.</td>
 | ||
| 	    </tr>
 | ||
| 	    <tr>
 | ||
|           <td><strong>w</strong></td>
 | ||
| 	      <td>Вызывает команду command при присвоении значения
 | ||
| 		переменной.</td>
 | ||
| 	    </tr>
 | ||
| 	    <tr>
 | ||
| 	      <td><strong>u</strong></td>
 | ||
| 
 | ||
| 	      <td>Вызывает команду <em>command</em> при удалении
 | ||
| 		  переменной.  Переменная может удаляться как явно (с
 | ||
| 		  помощью команды <strong><a
 | ||
| 		  href="unset.html">unset</a></strong>), так и неявно (при
 | ||
| 		  завершении процедуры). переменная также удаляется
 | ||
| 		  при удалении интерпретатора, в котором она была
 | ||
| 		  создана.  Однако, при этом соответствующая команда
 | ||
| 		  не вызывается, так как уже нет интерпретатора, в
 | ||
| 		  котором ее можно было бы выполнить.
 | ||
| 	      </td>
 | ||
| 	    </tr>
 | ||
| 	</table>
 | ||
| 
 | ||
| 	<p>Когда срабатывает команда <strong>trace</strong>, то исполняемая
 | ||
| 	  команда <em>command</em> дополняется тремя аргументами, как
 | ||
| 	  указано ниже</p>
 | ||
| 	<pre>
 | ||
| 	  <strong>command</strong> <em>name1</em> <em>name2</em> <em>op</em><br>
 | ||
| 	</pre>
 | ||
| 
 | ||
| 	<p>Здесь <em>name1</em> это имя переменной, действия с которой
 | ||
| 	  вызвали срабатывание команды. Если это элемент массива, то
 | ||
| 	  <em>name1</em> это имя массива, а <em>name2</em> - имя
 | ||
| 	  конкретного элемента массива. В противном случае
 | ||
| 	  <em>name2</em> - пустая строка. Если в команде <em>trace</em>
 | ||
| 	  было указано имя массива и он удаляется, то <em>name2</em>
 | ||
| 	  также будет пустой строкой. Имена в переменных <em>name1</em>
 | ||
| 	  и <em>name2</em> не обязано совпадать с теми, что были заданы
 | ||
| 	  в команде <strong>trace variable</strong>, поскольку команда <a
 | ||
| 	  href="upvar.html"><strong>upvar</strong></a> позволяет процедуре
 | ||
| 	  обращаться к переменной по различным именам. Аргумент
 | ||
| 	  <em>op</em> указывает какое именно действие выполнялось с
 | ||
| 	  переменной и может принимать значения <strong>r</strong>, <strong>w</strong> или
 | ||
| 	  <strong>u</strong> как указано выше.
 | ||
| 	</p>
 | ||
| 
 | ||
| 	<p>Команда <em>command</em> исполняется в том же контексте, что
 | ||
| 	  и код, вызвавший срабатывание <strong>trace</strong>. То есть если
 | ||
| 	  действие с переменной выполнялось в процедуре, то команда
 | ||
| 	  <em>command</em> может обращаться к локальным переменным этой
 | ||
| 	  процедуры. Этот контекст может отличаться от контекста, в
 | ||
| 	  котором выполнялась сама команда <strong>trace</strong>. Если команда
 | ||
| 	  <em>conmmand</em> есть вызов процедуры (как обычно и бывает),
 | ||
| 	  то в процедуре необходимо использовать команду <a href=
 | ||
| 	  "upvar.html"><strong>upvar</strong></a> или <a href=
 | ||
| 	  "uplevel.html"><strong>uplevel</strong></a> чтобы получить доступ к
 | ||
| 	  контролируемой переменной. Как уже говорилось, имена в
 | ||
| 	  переменных <em>name1</em> и <em>name2</em>не обязано совпадать с
 | ||
| 	  теми, что были заданы в команде <strong>trace variable</a></strong>,
 | ||
| 	  поскольку команда <a href="upvar.html"><strong>upvar</strong></a>
 | ||
| 	  позволяет процедуре обращаться к переменной по различным
 | ||
| 	  именам.</p>
 | ||
| 
 | ||
| 	<p>Если команда <strong>trace</strong> контролирует чтение и запись в
 | ||
| 	  переменную, команда <em>command</em> может изменить результат
 | ||
| 	  отслеживаемой операции. Если команда <em>command</em> изменяет
 | ||
| 	  значение отслеживаемой переменной, то новое значение будет
 | ||
| 	  возвращено как результат отслеживаемой операции. Величина,
 | ||
| 	  возвращаемая командой <em>command</em>, игнорируется, если
 | ||
| 	  только это не ошибка. Тогда отслеживаемая операция также
 | ||
| 	  возвращает ошибку с тем же самым сообщением об ошибке,
 | ||
| 	  которое было сформировано в команде <em>command</em>, не
 | ||
| 	  поясняя, что ошибка произошла в результате отслеживания
 | ||
| 	  переменной. Это может приводить к определенным трудностям в
 | ||
| 	  определении истиной операции, при выполнении которой
 | ||
| 	  возникла ошибка.</p>
 | ||
| 
 | ||
| 	<p>При отслеживании записи в переменную команда <em>command</em>
 | ||
| 	  вызывается после того, как значение переменной
 | ||
| 	  изменено. Поэтому с ее помощью можно изменить присвоенное
 | ||
| 	  значение. Если при этом возвращать исходное значение,
 | ||
| 	  переменная окажется доступной только для чтения.</p>
 | ||
| 
 | ||
| 	<p>При выполнении команды <em>command</em> при отслеживании
 | ||
| 	  чтения или записи в переменную механизм слежения временно
 | ||
| 	  отключается. То есть выполнение этих операций в
 | ||
| 	  <em>command</em> не приведет к новых вызовам <em>command</em>.
 | ||
| 	  Однако, если в <em>command</em> выполняется удаление
 | ||
| 	  переменной, это приводит к соответствующему вызову.</p>
 | ||
| 
 | ||
| 	<p>Когда срабатывает команда trace на удаление переменной,
 | ||
| 	  переменная уже удалена. Если удаление переменной произошло
 | ||
| 	  вследствие завершения процедуры, команда <em>command</em>
 | ||
| 	  вызывается в контексте вызывающей процедуры, поскольку
 | ||
| 	  контекст вызвавшейся процедуры уже не существует.
 | ||
| 	  Отслеживание не отключается при выполнении <em>command</em> в
 | ||
| 	  случае удаления переменной. Поэтому если в <em>command</em>
 | ||
| 	  выполняется новая команда <strong>trace</strong> и удаляется
 | ||
| 	  соответствующая переменная, выполнится и соответствующая
 | ||
| 	  команда command. Ошибки при отслеживании удаления
 | ||
| 	  игнорируются.</p>
 | ||
| 
 | ||
| 	<p>Если одна и та же переменная отслеживается с помощью
 | ||
| 	  нескольких команда <strong>trace</strong>, то выполняться все
 | ||
| 	  соответствующие команды <em>command</em> с учетом порядка
 | ||
| 	  выполнения соответствующих команд <strong>trace</strong>. Чем позднее
 | ||
| 	  она выполнялась, тем раньше будет выполнена соответствующая
 | ||
| 	  команда<em> command</em>. Если одна из команд <em>command</em>
 | ||
| 	  при этом возвратит ошибку, остальные команды выполняться не
 | ||
| 	  будут. Если одна команда используется для отслеживания
 | ||
| 	  элемента массива, а другая - для массива в целом, первой
 | ||
| 	  выполняется команда отслеживания массива в целом, а затем
 | ||
| 	  уже команда отслеживания элемента.</p>
 | ||
| 
 | ||
| 	<p>Однажды выполненная команда <strong>trace</strong> остается активной
 | ||
| 	  пока она не удалена с помощью описанной ниже команды
 | ||
| 	  <strong>trace</strong> <em>vdelete</em>, пока не удалена переменная или
 | ||
| 	  пока не удален интерпретатор. Удаление элемента массива
 | ||
| 	  приведет к прекращению отслеживания этого элемента, но не
 | ||
| 	  отслеживания массива в целом.</p>
 | ||
| 
 | ||
| 	<p>Команда <strong>trace variable</strong> возвращает пустую строку.</p>
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt><strong>trace</strong> <em>vdelete</em> <em>name</em> <em>ops</em>
 | ||
| 	<em>command</em></dt>
 | ||
| 
 | ||
|       <dd><p>Если задано отслеживание переменной <em>name</em> с
 | ||
| 	  перечнем действий <em>ops</em> и командой <em>command</em>, то
 | ||
| 	  оно будет удалено. Соответственно команда <em>command</em>
 | ||
| 	  никогда не будет вызвана. Команда <strong>trace vdelete</strong>
 | ||
| 	  возвращает пустую строку.</p>
 | ||
|       </dd>
 | ||
|       
 | ||
|       <dt><strong>trace</strong> <em>vinfo</em> <em>name</em></dt>
 | ||
| 
 | ||
|       <dd><p>Возвращает список, содержащий по одному элементу для
 | ||
| 	  каждого заданного отслеживания для переменной name. Каждый
 | ||
| 	  элемент списка содержит два элемента, содержащие значения
 | ||
| 	  <em>ops</em> и <em>command</em> из команды <strong>trace</strong>, которой
 | ||
| 	  было задано соответствующее отслеживание. Если переменная
 | ||
| 	  name не существует или для нее не задано отслеживания,
 | ||
| 	  команда возвращает пустую строку.</p>
 | ||
|       </dd>
 | ||
|     </dl>
 | ||
|   </body>
 | ||
| </html>
 | 
