AddErrInfo
_________________________________________________________________
NAME
Tcl_AddErrorInfo, Tcl_SetErrorCode, Tcl_PosixError - record
information about errors
SYNOPSIS
#include <tcl.h>
Tcl_AddErrorInfo(interp, message)
Tcl_SetErrorCode(interp, element, element, ... (char *) NULL)
char *
Tcl_PosixError(interp)
ARGUMENTS
Tcl_Interp *interp (in) Interpreter in which to
record information.
char *message (in) Identifying string to
record in errorInfo
variable.
char *element (in) String to record as one
element of errorCode
variable. Last element
argument must be NULL.
_________________________________________________________________
DESCRIPTION
These procedures are used to manipulate two 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
manual 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_Eval it calls the procedure
Tcl_AddErrorInfo 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 automatically by
Tcl_Eval. Tcl_AddErrorInfo may be used for this purpose:
its message argument contains an additional string to be
appended to errorInfo. For example, the source command
calls Tcl_AddErrorInfo 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_AddErrorInfo is just after Tcl_Eval has returned
TCL_ERROR. In calling Tcl_AddErrorInfo, you may find it
useful to use the errorLine field of the interpreter (see
the Tcl_Interp manual entry for details).
The procedure Tcl_SetErrorCode is used to set the errorCode
variable. Its element arguments give one or more strings to
record in errorCode: each element will become one item of a
properly-formed Tcl list stored in errorCode.
Tcl_SetErrorCode is typically invoked just before returning
an error. If an error is returned without calling
Tcl_SetErrorCode then the Tcl interpreter automatically sets
errorCode to NONE.
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. In addition, 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 interp->result.
It is important to call the procedures described here rather
than setting errorInfo or errorCode directly with
Tcl_SetVar. The reason for this is that the Tcl interpreter
keeps information about whether these procedures have been
called. For example, the first time Tcl_AppendResult is
called for an error, it clears the existing value of
errorInfo and adds the error message in interp->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_ResetResult, Tcl_Interp
KEYWORDS
error, stack, trace, variable