tcl中是否有类似C作用域的实用程序

tcl中是否有类似C作用域的实用程序,tcl,Tcl,在软件开发中,能够找到函数的调用者通常非常有用,因为这是了解代码如何工作以及程序的其他部分对函数的期望的方法。cscope可以找到函数的调用者和被调用者,但它不是编译器,它通过在文本中搜索关键字来实现这一点 我想知道tcl中是否有这样的实用程序?因为在tcl中可以很容易地在运行时生成代码,而且许多API都使用回调,所以很难静态地确定从何处调用命令。简单地搜索代码可能是最简单的方法(在Unix上使用递归的grep,在Windows上使用findstr/s) 但是,在运行时确定从何处调用命令要容易得

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


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

因为在tcl中可以很容易地在运行时生成代码,而且许多API都使用回调,所以很难静态地确定从何处调用命令。简单地搜索代码可能是最简单的方法(在Unix上使用递归的
grep
,在Windows上使用
findstr/s

但是,在运行时确定从何处调用命令要容易得多,因为您可以对感兴趣的命令使用执行跟踪,并在该点(使用
info level
info frame
)内省调用堆栈

proc foo args{bar$args$args}
进程条args{put“>>$args
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}]
caller-call: foo 4 4
caller-info: type eval line 1 cmd {caller {bar {4 4} {4 4}} enter} proc ::foo level 1
>>{4 4} {4 4}<<