DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 
SCO Visual Tcl interpreter errors

Examples of error generation

This code sample is used in the following examples:

proc doit1 cbs {
# an intentionally malformed command
    for not_enough_args
}

proc doit2 cbs { # an intentionally unrecognized command egko doit2 }

proc freddy {} { # an intentionally incorrect number of arguments if leg }

# Main

set f1 [VtOpen error] set f [VtForm $f1.f ] VtPushButton $f.b -label "err1" -callback doit1 VtPushButton $f.b1 -label "err2" -callback doit2 VtPushButton $f.b2 -label "noCallBack" -callback nocallback

# generate this error if give arg to script if {[llength $argv] != 0 } freddy

VtShow $f

VtMainLoop

Example 1 -- entering a command-line argument

The user enters:

# vtcl err.tcl err

This command produces the following stack trace:

   Error: syntax error in expression "leg"
   syntax error in expression "leg"
       while executing
   "if leg"                           
       (procedure "freddy" line 2)
       invoked from within
   "freddy"
       invoked from within
   "if {[llength $argv] != 0 } freddy"
       (file "err.tcl" line 23)
The command generated an error in the procedure freddy while trying to treat the first argument of the if command (``leg'') as an expression. The stack trace displays the line where the error was detected and from where the command was invoked.

Example 2 -- pressing err1

The user enters:

# vtcl err.tcl

The user then presses the button labeled err1.

This action produces the following stack trace:

   Error: wrong # args: should be "for start test next command"
   wrong # args: should be "for start test next command"
       while executing
   "for not_enough_args"
       (procedure "doit1" line 3)
       invoked from within
   "doit1 {{dialog {}} {widget .error.f.b} {clickCount 1} {value err1}
          {mode select}}"
       invoked from within
   "VtMainLoop"
       (file "err.tcl" line 25)
This stack shows the error due to the incorrect argument count in the line containing for not_enough_args and the name of the procedure in which the error occurred (doit1). The stack trace indicates that the procedure was called from within VtMainLoop and that the procedure is a callback.

Example 3 -- pressing err2

The user enters:

# vtcl err.tcl

The user then presses the button labeled err2.

This action produces the following stack trace:

   Error: invalid command name "egko"
   invalid command name "egko"
       while executing
   "error "invalid command name
       invoked from within
   "if {!$tcl_interactive || ([info level] > 2) || [info script] != ""} {
           error "invalid command name
       }"
       (procedure "tclx_unknown2" line 17)
       invoked from within
   "tclx_unknown2 $args"
       invoked from within
   "return [tclx_unknown2 $args]..."
       (procedure "unknown" line 8)
       invoked from within
   "egko doit2"
       (procedure "doit2" line 3)
       invoked from within
   "doit2 {{dialog {}} {widget .error.f.b1} {clickCount 1} {value err2} {
          mode select}}"
       invoked from within
   "VtMainLoop"
       (file "err.tcl" line 25)
This is a typical dump for an unrecognized, or mistyped, command. It is complicated by the dump of the trace through unknown and tclx_unknown, which are used to implement autoloading of commands.

The important lines are:

   invalid command name "egko"
   <unknown and tclx_unknown handling skipped>
       invoked from within
   "egko doit2"
       (procedure "doit2" line 3)
       invoked from within
   "doit2 {{dialog {}} {widget .error.f.b1} {clickCount 1} {value err2}
       {mode select}}"
       invoked from within
   "VtMainLoop"
       (file "err.tcl" line 25)

Example 4 -- pressing noCallBack

The user enters:

# vtcl err.tcl

The user then presses the button labeled noCallBack.

This action produces the following stack trace:

   Error: invalid command name "nocallback"
   invalid command name "nocallback"
       while executing
   "error "invalid command name
       invoked from within
   "if {!$tcl_interactive || ([info level] > 2) || [info script] != ""} {
           error "invalid command name
       }"
       (procedure "tclx_unknown2" line 17)
       invoked from within
   "tclx_unknown2 $args"
       invoked from within
   "return [tclx_unknown2 $args]..."
       (procedure "unknown" line 8)
       invoked from within
   "nocallback {{dialog {}} {widget .error.f.b2} {clickCount 1}
       {value noCallBack} {mode select}}"
       invoked from within
   "VtMainLoop"
       (file "err.tcl" line 25)
This stack is similar to the previous one, except that the error is coming from within MainLoop when it tries to find the missing procedure, rather than from inside the procedure itself.

© 2005 The SCO Group, Inc. All rights reserved.
SCO OpenServer Release 6.0.0 - 02 June 2005