在软件开发中,能够找到函数的调用者通常非常有用,因为这是了解代码如何工作以及程序的其他部分对函数期望的方式。 cscope可以找到函数的调用者和被调用者,但它不是编译器,它通过在文本中搜索关键字来实现。
我想知道tcl中是否有这样的实用程序?
答案 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}]
如果你把它放在一个文件中,你会得到更多。