ADC Home > Reference Library > Reference > Mac OS X > Mac OS X Man Pages

 

This document is a Mac OS X manual page. Manual pages are a command-line technology for providing documentation. You can view these manual pages locally using the man(1) command. These manual pages come from many different sources, and thus, have a variety of writing styles.

For more information about the manual page format, see the manual page for manpages(5).



Tcl_AddErrorInfo(3)                        Tcl Library Procedures                        Tcl_AddErrorInfo(3)



____________________________________________________________________________________________________________

NAME
       Tcl_AddObjErrorInfo,  Tcl_AddErrorInfo,  Tcl_SetObjErrorCode,  Tcl_SetErrorCode,  Tcl_SetErrorCodeVA,
       Tcl_PosixError, Tcl_LogCommandInfo - record information about errors

SYNOPSIS
       #include <tcl.h>

       Tcl_AddObjErrorInfo(interp, message, length)

       Tcl_AddErrorInfo(interp, message)

       Tcl_SetObjErrorCode(interp, errorObjPtr)

       Tcl_SetErrorCode(interp, element, element, ... (char *) NULL)

       Tcl_SetErrorCodeVA(interp, argList)

       CONST char *
       Tcl_PosixError(interp)

       void
       Tcl_LogCommandInfo(interp, script, command, commandLength)

ARGUMENTS
       Tcl_Interp   *interp    (in)      Interpreter in which to record information.

       char         *message   (in)      For Tcl_AddObjErrorInfo, this points to the first byte of an  array
                                         of  bytes  containing a string to record in the errorInfo variable.
                                         This byte array may contain embedded null bytes  unless  length  is
                                         negative.  For Tcl_AddErrorInfo, this is a conventional C string to
                                         record in the errorInfo variable.

       int          length     (in)      The number of bytes to copy from message when setting the errorInfo
                                         variable.   If  negative,  all  bytes up to the first null byte are
                                         used.

       Tcl_Obj      *errorObjPtr(in)     This variable errorCode will be set to this value.

       char         *element   (in)      String to record as one element of errorCode variable.   Last  ele-ment element
                                         ment argument must be NULL.

       va_list      argList    (in)      An   argument   list   which   must  have  been  initialized  using
                                         TCL_VARARGS_START, and cleared using va_end.

       CONST char   *script    (in)      Pointer to first character in script containing command (must be <=
                                         command)

       CONST char   *command   (in)      Pointer to first character in command that generated the error

       int          commandLength(in)    Number of bytes in command; -1 means use all bytes up to first null
                                         byte
____________________________________________________________________________________________________________


DESCRIPTION
       These procedures are used to manipulate two Tcl global variables that hold information about  errors.
       The  variable  errorInfo  holds  a  stack trace of the operations that were in progress when an error
       occurred, and is intended to be human-readable.  The variable errorCode holds a list  of  items  that
       are  intended to be machine-readable.  The first item in errorCode identifies the class of error that
       occurred (e.g. POSIX means an error occurred in a POSIX  system  call)  and  additional  elements  in
       errorCode  hold additional pieces of information that depend on the class.  See the Tcl overview man-
       ual entry for details on the various formats for errorCode.

       The errorInfo variable is gradually built up as an error unwinds through the nested operations.  Each
       time an error code is returned to Tcl_EvalObjEx (or Tcl_Eval, which calls Tcl_EvalObjEx) it calls the
       procedure Tcl_AddObjErrorInfo to add additional text to errorInfo describing  the  command  that  was
       being  executed  when  the error occurred.  By the time the error has been passed all the way back to
       the application, it will contain a complete  trace  of  the  activity  in  progress  when  the  error
       occurred.

       It  is  sometimes useful to add additional information to errorInfo beyond what can be supplied auto-matically automatically
       matically by Tcl_EvalObjEx.  Tcl_AddObjErrorInfo may be used for this purpose: its message and length
       arguments describe an additional string to be appended to errorInfo.  For example, the source command
       calls Tcl_AddObjErrorInfo to record the name of the file being processed and the line number on which
       the  error  occurred; for Tcl procedures, the procedure name and line number within the procedure are
       recorded, and so on.  The best time to call  Tcl_AddObjErrorInfo  is  just  after  Tcl_EvalObjEx  has
       returned  TCL_ERROR.   In  calling  Tcl_AddObjErrorInfo,  you may find it useful to use the errorLine
       field of the interpreter (see the Tcl_Interp manual entry for details).

       Tcl_AddErrorInfo resembles Tcl_AddObjErrorInfo but differs in initializing errorInfo from the  string
       value  of  the  interpreter's result if the error is just starting to be logged.  It does not use the
       result as a Tcl object so any embedded null characters in the result will  cause  information  to  be
       lost.   It  also  takes  a  conventional C string in message instead of Tcl_AddObjErrorInfo's counted
       string.

       The procedure Tcl_SetObjErrorCode is used to set the errorCode variable. errorObjPtr contains a  list
       object  built  up  by  the  caller.  errorCode is set to this value. Tcl_SetObjErrorCode is typically
       invoked just before returning an error in an object command. If an error is returned without  calling
       Tcl_SetObjErrorCode or Tcl_SetErrorCode the Tcl interpreter automatically sets errorCode to NONE.

       The  procedure  Tcl_SetErrorCode is also used to set the errorCode variable. However, it takes one or
       more strings to record instead of an object. Otherwise,  it  is  similar  to  Tcl_SetObjErrorCode  in
       behavior.

       Tcl_SetErrorCodeVA is the same as Tcl_SetErrorCode except that instead of taking a variable number of
       arguments it takes an argument list.

       Tcl_PosixError sets the errorCode variable after an error in a POSIX kernel call.  It reads the value
       of  the errno C variable and calls Tcl_SetErrorCode to set errorCode in the POSIX format.  The caller
       must previously have called Tcl_SetErrno to set errno; this is necessary on some platforms (e.g. Win-dows) Windows)
       dows)  where  Tcl  is  linked  into an application as a shared library, or when the error occurs in a
       dynamically loaded extension. See the manual entry for Tcl_SetErrno for more information.

       Tcl_PosixError returns a human-readable diagnostic message for the error (this is the same value that
       will  appear as the third element in errorCode).  It may be convenient to include this string as part
       of the error message returned to the application in the interpreter's result.

       Tcl_LogCommandInfo is invoked after an error occurs in an interpreter.  It adds information about the
       command  that was being executed when the error occurred to the errorInfo variable, and the line num-ber number
       ber stored internally in the interpreter  is  set.   On  the  first  call  to  Tcl_LogCommandInfo  or
       Tcl_AddObjErrorInfo since an error occurred, the old information in errorInfo is deleted.

       It  is  important  to  call  the procedures described here rather than setting errorInfo or errorCode
       directly with Tcl_ObjSetVar2.  The reason for this is that  the  Tcl  interpreter  keeps  information
       about  whether these procedures have been called.  For example, the first time Tcl_AddObjErrorInfo is
       called for an error, it clears the existing value of errorInfo and adds  the  error  message  in  the
       interpreter's  result  to the variable before appending message; in subsequent calls, it just appends
       the new message.  When Tcl_SetErrorCode is called, it sets a flag indicating that errorCode has  been
       set;  this  allows  the  Tcl interpreter to set errorCode to NONE if it receives an error return when
       Tcl_SetErrorCode hasn't been called.

       If the procedure Tcl_ResetResult is called, it clears all of the state associated with errorInfo  and
       errorCode  (but it doesn't actually modify the variables).  If an error had occurred, this will clear
       the error state to make it appear as if no error had occurred after all.


SEE ALSO
       Tcl_DecrRefCount, Tcl_IncrRefCount, Tcl_Interp, Tcl_ResetResult, Tcl_SetErrno


KEYWORDS
       error, object, object result, stack, trace, variable



Tcl                                                  8.0                                 Tcl_AddErrorInfo(3)

Did this document help you?
Yes: Tell us what works for you.
It’s good, but: Report typos, inaccuracies, and so forth.
It wasn’t helpful: Tell us what would have helped.