获取tcl 8.4中的行号

时间:2016-05-05 11:54:59

标签: tcl

我需要在它的正文中获取tcl proc的调用行号。

从8.5 tcl开始有info frame命令允许跟随:

proc printLine {} {
    set lineNum [dict get [info frame 1]  line]
}

我需要相同的8.4

2 个答案:

答案 0 :(得分:5)

8.4中没有;数据根本没有收集。我猜你可以在线上搜索一个唯一的令牌,但这就是所有。

proc lineNumber {uniqueToken} {
    set name [lindex [info level 1] 0]
    set body [uplevel 2 [list info body $name]]
    set num 0
    foreach line [split $body \n] {
        incr num
        if {[string first $uniqueToken $line] >= 0} {
            return $num
        }
    }
    error "could not find token '$uniqueToken'"
}

请注意,不再支持8.4。升级。

答案 1 :(得分:0)

我正在使用tcl 8.5,但它应在8.4版上运行。这里是:

#!/usr/bin/tclsh

puts "tcl version: $tcl_version"

proc linum {} {
    if {![string equal -nocase precompiled [lindex [info frame -1] 1]]} {
        return [lindex [info frame -1] 3]
    } else {
        return Unknown
    }
}

puts "call proc @line:[linum]"

结果是:

tcl version: 8.5
call proc @line:13

您可以参考info frame以获得更多详细信息