2017-04-20 5 views
1

ユーザ定義のprocコールをTclファイルにとしてリストする方法はありますか? ?tclで呼び出されたprocsのリスト

TCLファイルがあります。そのファイルから呼び出されたすべてのprocsをリストしたいと思います。

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

選択するために、そのトレースをするために添付するコマンドを、私たちが使用することができます。

よろしく keerthan

+0

実行トレースは、少しの助けを借りてそのようなことをすることができます。主なトリッキーなビットは、トレースを添付するコマンドを決定することであり、正確なユースケースに依存します。 –

答えて

2

特定コマンドが呼び出されたときにメッセージを取得するには、我々はenter execution traceを使用することができます様々なアプローチ。

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 

、あなたはそれを停止することができますが、それはたくさんですより多くの仕事)。名前空間に現在あるすべてのプロシージャにアタッチするだけで簡単になります。

+0

実行トレースは、パフォーマンスに大きな影響を与える可能性があることに注意してください。 –

関連する問題