TCL变量访问统计

时间:2013-05-07 01:13:50

标签: scope tcl

我想做的事情似乎很简单,但我不知道TCL解释器是否具有此功能。

我有一个tcl脚本,在其范围内运行之前会定义数千个变量 - 这是通过一个前脚本完成的,该脚本只对数千个变量执行“全局”操作以将其带入当前范围

是否有一种简单的方法可以确定在该脚本中实际使用了哪些数千个变量?

例如,如果脚本有变量

a,b,c,d,e,

但只有变量e被访问(无论是修改还是刚刚使用),我想知道。

1 个答案:

答案 0 :(得分:1)

您可以使用tcl的trace功能来跟踪变量访问。

类似的东西:

# at the end of the pre-script:

array set var_stats {}

proc track_var {varname n1 n2 op} {
    global var_stats
    incr var_stats($varname.$op)
}

foreach var $list_of_varnames {
    foreach op {array read write unset} {
        set var_stats($var.$op) 0
        trace add variable $var $op [list track_var $var]
    }
}

上面的代码会在访问变量时增加相应的统计信息(数组,读取,写入和取消设置)。在脚本结束时,只需使用array getparray转储数组。


更新回答:

我只是重读了你的问题,并意识到如果你只想知道访问哪个变量,那么有一种更简单的方法:

array set var_stats {}

proc track_var {varname n1 n2 op} {
    global var_stats
    set var_stats($varname) 1
}

foreach var $list_of_varnames {
    trace add variable $var {array read write unset} [list track_var $var]
}

然后在脚本结束时,只需执行array names即可获取所有已访问变量的列表。