有没有一个TCL命令可以列出所有被引用的文件?
例如-我在test.tcl文件中引用了a.tcl、b.tcl和c.tcl。是否有一个TCL命令可以查看这些被引用的文件?
例如-我在test.tcl文件中引用了a.tcl、b.tcl和c.tcl。是否有一个TCL命令可以查看这些被引用的文件?
source
命令本身以在某个地方跟踪source
的文件,像这样:rename source __real_source
proc source args {
global sourced
lappend sourced $args
uplevel 1 [linsert $args 0 __real_source]
}
更新:针对Donal关于source
命令脆弱性的评论,以下是如何设置执行跟踪:
proc register_sourced {cmd args} {
global sourced
lappend sourced [lindex $cmd end]
}
trace add execution source leave register_sourced
uplevel
命令中不应该执行__real_source
吗? - bmkproc source args {lappend ::sourced [lindex $args end];tailcall __real_source {*}$args}
- Donal Fellowssource
的当前堆栈帧必须是“当前”堆栈帧,这是非常重要的;包机制广泛使用它。它还有一个问题,即linsert
不会修改变量。在您的代码中已经修复了这个问题... - Donal Fellowssource
命令上加上一个"execution enter" trace怎么样?会起作用吗? - kostix