CrtTrace.3
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:8k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1989-1993 The Regents of the University of California.
  3. '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
  4. '" Copyright (c) 2002 by Kevin B. Kenny.  All rights reserved.
  5. '"
  6. '" See the file "license.terms" for information on usage and redistribution
  7. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  8. '" 
  9. '" RCS: @(#) $Id: CrtTrace.3,v 1.6.2.1 2003/07/18 15:20:51 dgp Exp $
  10. '" 
  11. .so man.macros
  12. .TH Tcl_CreateTrace 3 "" Tcl "Tcl Library Procedures"
  13. .BS
  14. .SH NAME
  15. Tcl_CreateTrace, Tcl_CreateObjTrace, Tcl_DeleteTrace - arrange for command execution to be traced
  16. .SH SYNOPSIS
  17. .nf
  18. fB#include <tcl.h>fR
  19. .sp
  20. Tcl_Trace
  21. fBTcl_CreateTracefR(fIinterp, level, proc, clientDatafR)
  22. .sp
  23. Tcl_Trace
  24. fBTcl_CreateObjTracefR(fIinterp, level, flags, objProc, clientData, deleteProcfR)
  25. .sp
  26. fBTcl_DeleteTracefR(fIinterp, tracefR)
  27. .SH ARGUMENTS
  28. .AS Tcl_CmdObjTraceDeleteProc (clientData)()
  29. .AP Tcl_Interp *interp in
  30. Interpreter containing command to be traced or untraced.
  31. .AP int level in
  32. Only commands at or below this nesting level will be traced unless
  33. 0 is specified.  1 means
  34. top-level commands only, 2 means top-level commands or those that are
  35. invoked as immediate consequences of executing top-level commands
  36. (procedure bodies, bracketed commands, etc.) and so on.
  37. A value of 0 means that commands at any level are traced.
  38. .AP int flags in
  39. Flags governing the trace execution.  See below for details.
  40. .AP Tcl_CmdObjTraceProc *objProc in
  41. Procedure to call for each command that's executed.  See below for
  42. details of the calling sequence.
  43. .AP Tcl_CmdTraceProc *proc in
  44. Procedure to call for each command that's executed.  See below for
  45. details on the calling sequence.
  46. .AP ClientData clientData in
  47. Arbitrary one-word value to pass to fIobjProcfR or fIprocfR.
  48. .AP Tcl_CmdObjTraceDeleteProc *deleteProc
  49. Procedure to call when the trace is deleted.  See below for details of
  50. the calling sequence.  A NULL pointer is permissible and results in no
  51. callback when the trace is deleted.
  52. .AP Tcl_Trace trace in
  53. Token for trace to be removed (return value from previous call
  54. to fBTcl_CreateTracefR).
  55. .BE
  56. .SH DESCRIPTION
  57. .PP
  58. fBTcl_CreateObjTracefR arranges for command tracing.  After it is
  59. called, fIobjProcfR will be invoked before the Tcl interpreter calls
  60. any command procedure when evaluating commands in fIinterpfR.
  61. The return value from fBTcl_CreateObjTracefR is a token for the trace,
  62. which may be passed to fBTcl_DeleteTracefR to remove the trace.
  63. There may be many traces in effect simultaneously for the same
  64. interpreter.
  65. .PP
  66. fIobjProcfR should have arguments and result that match the type,
  67. fBTcl_CmdObjTraceProcfR:
  68. .CS
  69. typedef int fBTcl_CmdObjTraceProcfR( 
  70.     fBClientDatafR fIclientDatafR,
  71.     fBTcl_InterpfR* fIinterpfR,
  72.     int fIlevelfR,
  73.     CONST char* fIcommandfR,
  74.     fBTcl_CommandfR fIcommandTokenfR,
  75.     int fIobjcfR,
  76.     fBTcl_ObjfR *CONST fIobjvfR[] );
  77. .CE
  78. The fIclientDatafR and fIinterpfR parameters are copies of the
  79. corresponding arguments given to fBTcl_CreateTracefR.
  80. fIClientDatafR typically points to an application-specific data
  81. structure that describes what to do when fIobjProcfR is invoked.  The
  82. fIlevelfR parameter gives the nesting level of the command (1 for
  83. top-level commands passed to fBTcl_EvalfR by the application, 2 for
  84. the next-level commands passed to fBTcl_EvalfR as part of parsing or
  85. interpreting level-1 commands, and so on). The fIcommandfR parameter
  86. points to a string containing the text of the command, before any
  87. argument substitution.  The fIcommandTokenfR parameter is a Tcl
  88. command token that identifies the command to be invoked.  The token
  89. may be passed to fBTcl_GetCommandNamefR,
  90. fBTcl_GetCommandTokenInfofR, or fBTcl_SetCommandTokenInfofR to
  91. manipulate the definition of the command. The fIobjcfR and fIobjvfR
  92. parameters designate the final parameter count and parameter vector
  93. that will be passed to the command, and have had all substitutions
  94. performed.
  95. .PP
  96. The fIobjProcfR callback is expected to return a standard Tcl status
  97. return code.  If this code is fBTCL_OKfR (the normal case), then
  98. the Tcl interpreter will invoke the command.  Any other return code
  99. is treated as if the command returned that status, and the command is
  100. fInotfR invoked.
  101. .PP
  102. The fIobjProcfR callback must not modify fIobjvfR in any way.  It
  103. is, however, permissible to change the command by calling
  104. fBTcl_SetCommandTokenInfofR prior to returning.  Any such change
  105. takes effect immediately, and the command is invoked with the new
  106. information.
  107. .PP
  108. Tracing will only occur for commands at nesting level less than
  109. or equal to the fIlevelfR parameter (i.e. the fIlevelfR
  110. parameter to fIobjProcfR will always be less than or equal to the
  111. fIlevelfR parameter to fBTcl_CreateTracefR).
  112. .PP
  113. Tracing has a significant effect on runtime performance because it
  114. causes the bytecode compiler to refrain from generating in-line code
  115. for Tcl commands such as fBiffR and fBwhilefR in order that they
  116. may be traced.  If traces for the built-in commands are not required,
  117. the fIflagsfR parameter may be set to the constant value
  118. fBTCL_ALLOW_INLINE_COMPILATIONfR.  In this case, traces on built-in
  119. commands may or may not result in trace callbacks, depending on the
  120. state of the interpreter, but run-time performance will be improved
  121. significantly.  (This functionality is desirable, for example, when
  122. using fBTcl_CreateObjTracefR to implement an execution time
  123. profiler.)
  124. .PP
  125. Calls to fIobjProcfR will be made by the Tcl parser immediately before
  126. it calls the command procedure for the command (fIcmdProcfR).  This
  127. occurs after argument parsing and substitution, so tracing for
  128. substituted commands occurs before tracing of the commands
  129. containing the substitutions.  If there is a syntax error in a
  130. command, or if there is no command procedure associated with a
  131. command name, then no tracing will occur for that command.  If a
  132. string passed to Tcl_Eval contains multiple commands (bracketed, or
  133. on different lines) then multiple calls to fIobjProcfR will occur,
  134. one for each command.
  135. .PP
  136. fBTcl_DeleteTracefR removes a trace, so that no future calls will be
  137. made to the procedure associated with the trace.  After fBTcl_DeleteTracefR
  138. returns, the caller should never again use the fItracefR token.
  139. .PP
  140. When fBTcl_DeleteTracefR is called, the interpreter invokes the
  141. fIdeleteProcfR that was passed as a parameter to
  142. fBTcl_CreateObjTracefR.  The fIdeleteProcfR must match the type,
  143. fBTcl_CmdObjTraceDeleteProcfR:
  144. .CS
  145. typedef void fBTcl_CmdObjTraceDeleteProcfR( 
  146.     fBClientDatafR fIclientDatafR
  147. );
  148. .CE
  149. The fIclientDatafR parameter will be the same as the
  150. fIclientDatafR parameter that was originally passed to
  151. fBTcl_CreateObjTracefR.
  152. .PP
  153. fBTcl_CreateTracefR is an alternative interface for command tracing,
  154. fInot recommended for new applicationsfR.  It is provided for backward
  155. compatibility with code that was developed for older versions of the
  156. Tcl interpreter.  It is similar to fBTcl_CreateObjTracefR, except
  157. that its fIprocfR parameter should have arguments and result that
  158. match the type fBTcl_CmdTraceProcfR:
  159. .CS
  160. typedef void Tcl_CmdTraceProc(
  161. ClientData fIclientDatafR,
  162. Tcl_Interp *fIinterpfR,
  163. int fIlevelfR,
  164. char *fIcommandfR,
  165. Tcl_CmdProc *fIcmdProcfR,
  166. ClientData fIcmdClientDatafR,
  167. int fIargcfR,
  168. CONST char *fIargvfR[]);
  169. .CE
  170. The parameters to the fIprocfR callback are similar to those of the
  171. fIobjProcfR callback above. The fIcommandTokenfR is
  172. replaced with fIcmdProcfR, a pointer to the (string-based) command
  173. procedure that will be invoked; and fIcmdClientDatafR, the client
  174. data that will be passed to the procedure.  The fIobjcfR parameter
  175. is replaced with an fIargvfR parameter, that gives the arguments to
  176. the command as character strings.
  177. fIProcfR must not modify the fIcommandfR or fIargvfR strings.
  178. .PP
  179. If a trace created with fBTcl_CreateTracefR is in effect, inline
  180. compilation of Tcl commands such as fBiffR and fBwhilefR is always
  181. disabled.  There is no notification when a trace created with
  182. fBTcl_CreateTracefR is deleted.
  183. There is no way to be notified when the trace created by
  184. fBTcl_CreateTracefR is deleted.  There is no way for the fIprocfR
  185. associated with a call to fBTcl_CreateTracefR to abort execution of
  186. fIcommandfR.
  187. .SH KEYWORDS
  188. command, create, delete, interpreter, trace