TCL,得到catch命令完全错误信息(TCL, get full error message in

2019-10-23 02:12发布

#!/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我遇到错误信息的只有第一行。

#!/usr/bin/tclsh

proc test {} {
    aaa
}

catch test msg
puts $msg

这将打印: invalid command name "aaa"

是否有可能得到catch命令完整的错误信息(文件,行,程序)? 我的程序有很多文件,并收到错误消息的只有一条线路是很难从它在哪里找到。

Answer 1:

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

更完整的答案是看捕获和回报手册页和利用的-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获得该特定项目。



文章来源: TCL, get full error message in catch command