TCL,在catch命令中获取完整的错误消息

时间:2015-05-13 10:53:27

标签: error-handling tcl

#!/usr/bin/tclsh     

proc test {} {
    aaa
}

test

当我运行此脚本时,我收到错误消息:

invalid command name "aaa"
    while executing
"aaa"
    (procedure "test" line 2)
    invoked from within
"test"
    (file "./a.tcl" line 7)

如果我在catch中运行test命令,我只会得到第一行错误消息。

#!/usr/bin/tclsh

proc test {} {
    aaa
}

catch test msg
puts $msg

这打印: invalid command name "aaa"

是否可以在catch命令中获取完整的错误消息(文件,行,过程)?我的程序有很多文件,只需要获取一行错误信息就很难从哪里找到它。

1 个答案:

答案 0 :(得分:3)

简短的回答是查看将包含堆栈跟踪的errorInfo的值。

更完整的答案是查看catchreturn手册页,并使用-optionsVarName语句中的catch参数来收集更详细的信息提供的信息。 return手册页提供了有关使用此功能的一些信息。但是交互式会话的一个粗略的例子:

% proc a {} { catch {funky} err detail; return $detail }
% a
-code 1 -level 0 -errorstack {INNER {invokeStk1 funky} CALL a} -errorcode NONE -errorinfo {invalid command name "funky"
    while executing
"funky"} -errorline 1
%

detail变量是字典,因此请使用dict get $detail -errorinfo来获取该特定项目。