在tcl中是否存在类似实用程序的C范围

时间:2014-06-13 06:26:56

标签: tcl

在软件开发中,能够找到函数的调用者通常非常有用,因为这是了解代码如何工作以及程序的其他部分对函数期望的方式。 cscope可以找到函数的调用者和被调用者,但它不是编译器,它通过在文本中搜索关键字来实现。

我想知道tcl中是否有这样的实用程序?

1 个答案:

答案 0 :(得分:3)

因为您可以在Tcl中非常容易地在运行时生成代码,并且许多API使用回调,所以相当硬来静态地确定调用命令的位置。简单地搜索代码可能是最简单的方法(在Unix上使用递归grep,在Windows上使用findstr /s

但是,确定从在运行时调用命令的位置要容易得多,因为您可以在感兴趣的命令上使用执行跟踪并在此时内省调用堆栈(使用{{1 }和info level)。

info frame

以交互方式运行输出:

proc foo args {bar $args $args}
proc bar args {puts ">>$args<<"}
proc caller args {
    puts "caller-call: [info level -1]"
    puts "caller-info: [info frame -1]"
}
trace add execution bar enter caller
foo [expr 1+3] [llength {s p q r}]

如果你把它放在一个文件中,你会得到更多。