我需要在它的正文中获取tcl proc的调用行号。
从8.5 tcl开始有info frame命令允许跟随:
proc printLine {} {
set lineNum [dict get [info frame 1] line]
}
我需要相同的8.4
答案 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以获得更多详细信息