Tcl 如何获取代码行编号和错误信息?

Tcl 如何获取代码行编号和错误信息?,tcl,Tcl,我正在使用以下TCL代码: proc RunCSM { scen } { catch { $scen start } if { "[$scen status]" != "SUCCESS" } { puts "$scen FAILED. Error Info:" puts "[$scen errorInfo]" ... 问题是,在这种情

我正在使用以下TCL代码:

proc RunCSM { scen } {
                catch { $scen start }
                if { "[$scen status]" != "SUCCESS" } {
                        puts "$scen FAILED.  Error Info:"
                        puts "[$scen errorInfo]" ...

问题是,在这种情况下,如果有错误,它会显示错误信息调试信息作为errorInfo标志的输出,但在这种情况下,我还需要失败代码的行号。这是怎么可能的?

从8.5版开始,最简单的方法是切换到catch形式,它允许您在脚本之后的第二个可选参数的opt变量中以字典的形式获取扩展结果信息:

catch { $scen start } msg opt
if { "[$scen status]" ne "SUCCESS" } {   # use 'ne' to compare strings, please
    set info [dict get $opt -errorinfo]
    set line [dict get $opt -errorline]
    puts "$scen FAILED saying '$msg' at $line. Error Info:"
    puts $info
    # ...
}

从8.5版开始,最简单的方法是切换到catch格式,该格式允许您在下面的opt变量(位于脚本之后的第二个可选参数)中以字典的形式获取扩展结果信息:

catch { $scen start } msg opt
if { "[$scen status]" ne "SUCCESS" } {   # use 'ne' to compare strings, please
    set info [dict get $opt -errorinfo]
    set line [dict get $opt -errorline]
    puts "$scen FAILED saying '$msg' at $line. Error Info:"
    puts $info
    # ...
}

你可以试着解析错误信息,但是8.4现在非常过时,而且不受支持,顺便说一句。我们让进入8.5变得更容易…你可以试着解析错误信息,但是8.4现在非常过时,而且不受支持,顺便说一句。我们让进入8.5变得更容易…