列出在tcl中调用的procs

时间:2017-04-20 15:35:27

标签: python-2.7 function unix tcl proc-sql

有没有办法在Tcl文件中列出所有用户定义的proc调用。 ?

我有一个TCL文件,我想列出该文件调用的所有过程。

此致 keerthan

1 个答案:

答案 0 :(得分:2)

要在调用特定命令时收到消息,我们可以使用enter execution trace

trace add execution $theCommand enter {apply {{call op} {
    puts "Called [lindex $call 0]"
}}

要选择将该跟踪附加到哪个命令,我们可以使用各种方法。最简单的方法是,如果您可以识别要附加到其程序的命名空间:

foreach p [info procs ::theNamespace::*] {
    trace add execution $p enter {apply {{call op} {
        puts "Called [lindex $call 0]"
    }}
}

您还可以将其附加到源自特定文件时创建的每个过程。这有点复杂:

# Need to keep this script fragment so we can remove it again after the source
set tracer {apply {{proccall args} {
    set cmd [uplevel 1 [list namespace origin [lindex $proccall 1]]]
    trace add execution $cmd enter {apply {{call args} {
        puts "Called [lindex $call 0]"
    }}
}}

trace add execution ::proc leave $tracer
source /the/script.tcl
trace remove execution ::proc leave $tracer

你可以通过这种方式变得非常复杂(并且要注意它也会影响脚本加载包所创建的程序;你可以阻止它,但它需要做更多的工作)。只是附加到当前名称空间中的所有过程都比较简单。