【发布时间】:2012-09-18 13:14:34
【问题描述】:
我有以下程序:
rename proc _proc
_proc proc {name args body} {
global pass_log_trace
set g_log_trace "0"
if {[info exists pass_log_trace]} {
set g_log_trace $pass_log_trace
}
# simple check if we have double declaration of the same procedure
if {[info procs $name] != ""} {
puts "\nERROR: redeclaration of procedure: $name"
}
_proc $name $args $body
if {$g_log_trace != 0} {
trace add execution $name enter trace_report_enter
trace add execution $name leave trace_report_leave
}
}
此过程的目的主要是为代码中的所有过程添加入口和出口点跟踪器。但是,由于某种原因,它也删除了命名空间范围。比如这样的代码:
namespace eval bob {
namespace eval joe {
proc proc1 {} {}
}
proc proc2 {} {
puts "proc2"
}
}
puts "Namespace calling [info procs ::bob\::*]"
不会在bob 命名空间中创建过程,而是在全局命名空间中创建过程。
调用namespace current 总是返回::。
有什么想法吗?
【问题讨论】:
-
也许使用 tcllib logger trace 命令可以获得类似的效果。 tcllib.sourceforge.net/doc/logger.html
标签: tcl