有没有办法在Tcl文件中列出所有用户定义的proc调用。 ?
我有一个TCL文件,我想列出该文件调用的所有过程。
此致 keerthan
答案 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
你可以通过这种方式变得非常复杂(并且要注意它也会影响脚本加载包所创建的程序;你可以阻止它,但它需要做更多的工作)。只是附加到当前名称空间中的所有过程都比较简单。