次の手順があります。
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
は常に を返します::
。
何か案は?