#!/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命令中获取完整的错误消息(文件,行,过程)?我的程序有很多文件,只需要获取一行错误信息就很难从哪里找到它。
答案 0 :(得分:3)
简短的回答是查看将包含堆栈跟踪的errorInfo
的值。
更完整的答案是查看catch和return手册页,并使用-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
来获取该特定项目。