## Tcl9.0.3/Tk9.0.3 Documentation > Thread Package Commands, version 3.0.4 > ttrace

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    ttrace — 追跡基準の解釈実行機能の初期化 Trace-based interpreter initialization
  構文 SYNOPSIS
  説明 DESCRIPTION
  使用者命令 USER COMMANDS
    ttrace::eval arg ?arg . . .?
    ttrace::enable
    ttrace::disable
    ttrace::cleanup
    ttrace::update ?epoch?
    ttrace::getscript
  CALLBACK COMMANDS
    ttrace::atenable cmd arglist body
    ttrace::atdisable cmd arglist body
    ttrace::addtrace cmd arglist body
    ttrace::addscript name body
    ttrace::addresolver cmd arglist body
    ttrace::addcleanup body
    ttrace::addentry cmd var val
    ttrace::getentry cmd var
    ttrace::getentries cmd ?pattern?
    ttrace::delentry cmd
    ttrace::preload cmd
  論議 DISCUSSION
  SEE ALSO
  KEYWORDS

### NAME

ttrace — 追跡基準の解釈実行機能の初期化 Trace-based interpreter initialization

### 構文 SYNOPSIS

package require Tcl 9 .0

package require thread ?3 .0?

ttrace::eval arg ?arg . . .?

ttrace::enable

ttrace::disable

ttrace::cleanup

ttrace::update ?epoch?

ttrace::getscript

ttrace::atenable cmd arglist body

ttrace::atdisable cmd arglist body

ttrace::addtrace cmd arglist body

ttrace::addscript name body

ttrace::addresolver cmd arglist body

ttrace::addcleanup body

ttrace::addentry cmd var val

ttrace::getentry cmd var

ttrace::getentries cmd ?pattern?

ttrace::delentry cmd

ttrace::preload cmd

### 説明 DESCRIPTION

この梱包は､多重実行薄片の応用譜内で多重実行薄片を横断した状態の解釈実行機能の複製基礎データ機能の要求応答枠組みを生成する これは､ Tcl 命令追跡と Tcl unknown 命令と仕組みに関連する仕組みに依存している｡(訳註replication:分散環境に本物のデータの複製を配置しながら､整合性を保つ機能)　　　　　　 This package creates a framework for on-demand replication of the interpreter state across threads in an multithreading application . It relies on the mechanics of Tcl command tracing and the Tcl unknown command and mechanism .

この梱包は Tcl 多重実行薄片拡張を必要とするが､代わりにAOLの拡張性電網中央集中処理装置の内部にある独立の AOLserverでもよい｡ 　　　　　　　 The package requires Tcl threading extension but can be alternatively used stand-alone within the AOLserver, a scalable webserver from America Online .

きわめて簡潔に言えば､この短い用例は､ Tcl 多重実行薄片拡張による ttrace の使用法を図示している: 　　　　　　 In a nutshell, a short sample illustrating the usage of the ttrace with the Tcl threading extension:

    % package require ttrace
        3	.0	.1

        % set t1 [thread::create {package require ttrace; thread::wait}]
        tid0x1802800

        % ttrace::eval {proc test args {return test-[thread::id]}}
        % thread::send $t1 test
        test-tid0x1802800

        % set t2 [thread::create {package require ttrace; thread::wait}]
        tid0x1804000

        % thread::send $t2 test
        test-tid0x1804000

上で見られるように､ ttrace::eval と ttrace::update 命令は単純なTcl 手続函数の多重実行薄片規模の定義を生成することと､全ての実在するか後に生成される多重実行薄片にその定義を再適用することとに､使われる｡　　　　　　 As seen from above, the ttrace::eval and ttrace::update commands are used to create a thread-wide definition of a simple Tcl procedure and replicate that definition to all, already existing or later created, threads .

### 使用者命令 USER COMMANDS

この節では､使用者水準の命令を記述する｡ これらの命令は追跡体制の実行を制御する為に記述譜作者により使われる｡　　　　　　 This section describes user-level commands . Those commands can be used by script writers to control the execution of the tracing framework .

ttrace::eval arg ?arg . . .?
  この命令は､与えられた引数を鎖状に連結し､できあがった Tcl 命令を､追跡の体制が可能な状態で評価する｡もし､命令実行が良好であると､それは､追跡の世代の変更を応用譜内の全ての多重実行薄片に自動的に伝播する為に必要な段階をとる｡ AOLserver については､新しく生成された多重実行薄片のみが実際に世代の変更を受ける｡ Tcl 多重実行薄片の拡張については､拡張によって生成された全ての多重実行薄片は自動的に更新される｡もし命令実行が Tcl 不都合になる場合､宣言の伝播は起らない｡　　　　　　　　　　 This command concatenates given arguments and evaluates the resulting Tcl command with trace framework enabled . If the command execution was ok, it takes necessary steps to automatically propagate the trace epoch change to all threads in the application . For AOLserver, only newly created threads actually receive the epoch change . For the Tcl threading extension, all threads created by the extension are automatically updated . If the command execution resulted in Tcl error, no state propagation takes place .

  これは､下に述べる大部分の命令を包含した様な､最も重要な多重実行薄片の使用者水準の命令梱包である｡これは､事物を非常に簡素化する､理由は､使用者は､この梱包を効果的に使う為に､この(一つの)命令だけを学べばよい｡他の命令は､下に述べるように､多くは完全性の為に含まれているだけである｡　　　　　　　 This is the most important user-level command of the package as it wraps most of the commands described below . This greatly simplifies things, because user need to learn just this (one) command in order to effectively use the package . Other commands, as described below, are included mostly for the sake of completeness .

ttrace::enable
  枠組み内の全ての登録された呼戻しを活性化し､新しい追跡の世代を始める｡ 追跡の世代は､時刻追跡が活性化されている間に解釈実行機能になされた全ての変更を対象に包込む｡　　　　　 Activates all registered callbacks in the framework and starts a new trace epoch . The trace epoch encapsulates all changes done to the interpreter during the time traces are activated .

ttrace::disable
  枠組み内の全ての登録呼戻しを不活性化し現在の追跡世代を閉じる｡　　　　　　　 Deactivates all registered callbacks in the framework and closes the current trace epoch .

ttrace::cleanup
  解釈実行機能内の要求毎に積込まれた原資を解消する事に使われる｡ これは､効果的に Tcl 解釈実行機能をその元の状態に戻す｡　　　　　　 Used to clean-up all on-demand loaded resources in the interpreter . It effectively brings Tcl interpreter to its pristine state .

ttrace::update ?epoch?
  指示項目の ?epoch? に合致する解釈実行機能の状態を刷新する為に使われる｡ もし､指示項目 ?epoch? が与えられない場合､最も最近の追跡世代に適用する｡　　　　　　 Used to refresh the state of the interpreter to match the optional trace ?epoch? . If the optional ?epoch? is not given, it takes the most recent trace epoch .

ttrace::getscript
  どの解釈実行機能内でも源譜になり得る合成された Tcl 記述譜を返す｡ この記述譜は Tcl unknown 命令の為の活動範囲を設定するので､記憶領域内の基礎データから追跡される原資を積込むことができる｡通常この命令は自動的に他の高水準命令 ttrace::eval や ttrace::update から起動される｡　　　　　　 Returns a synthesized Tcl script which may be sourced in any interpreter . This script sets the stage for the Tcl unknown command so it can load traced resources from the in-memory database . Normally, this command is automatically invoked by other higher-level commands like ttrace::eval and ttrace::update .

### CALLBACK COMMANDS

先行する語: 次の Tcl 命令の追跡の為に､梱包が既に呼戻しを含んでいる: proc, namespace, variable, load, and rename. 更に､ XOTcl v1.3.8+,や Tclへの OO-拡張 の為の､追跡原資(対象､級) に関する組が提供される｡ これは､大部分の実生活の必要性を解決する為の充実した基本を与え､特別な必要性を賄うための梱包を誂えることを望んでいる人々の為の実施例を担当する｡　　　　　　　 A word upfront: the package already includes callbacks for tracing following Tcl commands: proc, namespace, variable, load, and rename . Additionally, a set of callbacks for tracing resources (object, classes) for the XOTcl v1 .3 .8+, an OO-extension to Tcl, is also provided . This gives a solid base for solving most of the real-life needs and serves as an example for people wanting to customize the package to cover their specific needs .

下に､枠組み内の呼戻しを登録し､呼戻す記述譜を待つ為の命令を見付けることができる｡ これらの呼戻しは枠組みによって､解釈実行機能の宣言変更を集め､記憶域内の基礎データを構築し､誂えた刷新や種々の他の業務を遂行するために､起動される｡　　　　　　　 Below, you can find commands for registering callbacks in the framework and for writing callback scripts . These callbacks are invoked by the framework in order to gather interpreter state changes, build in-memory database, perform custom-cleanups and various other tasks .

ttrace::atenable cmd arglist body
  ttrace::enable の箇所で活性化される Tcl 呼戻しを登録する｡ 登録された呼戻しは､先入先出基準で活性化される｡ 呼戻し定義は､呼戻しの名前 cmd と､呼戻し引数のリスト arglist と､呼戻しの本体 body を含む｡ 効果的に､これは､実際標準 Tcl proc 命令の対話的呼出を真似る｡　　　　　　　 Registers Tcl callback to be activated at ttrace::enable . Registered callbacks are activated on FIFO basis . The callback definition includes the name of the callback, cmd, a list of callback arguments, arglist and the body of the callback . Effectively, this actually resembles the call interface of the standard Tcl proc command .

ttrace::atdisable cmd arglist body
  ttrace::disable の箇所で活性化される Tcl 呼戻しを登録する｡ 登録された呼戻しは､先入先出基準で活性化される｡ 呼戻し定義は､呼戻しの名前 cmd と､呼戻し引数のリスト arglist と､呼戻しの本体 body を含む｡ 効果的に､これは､実際標準 Tcl proc 命令の対話的呼出を真似る｡　　　　　　 Registers Tcl callback to be activated at ttrace::disable . Registered callbacks are activated on FIFO basis . The callback definition includes the name of the callback, cmd, a list of callback arguments, arglist and the body of the callback . Effectively, this actually resembles the call interface of the standard Tcl proc command .

ttrace::addtrace cmd arglist body
  Tcl cmd 命令を追跡する為に活性化された Tcl 呼戻しを登録する｡ 呼戻し定義は､追跡すべき Tcl 命令の名前 cmd と､呼戻し引数のリスト arglist と､呼戻しの本体body を含む｡ 効果的に､これは､実際標準 Tcl proc 命令の対話的呼出を真似る｡　　　　　　 Registers Tcl callback to be activated for tracing the Tcl cmd command . The callback definition includes the name of the Tcl command to trace, cmd, a list of callback arguments, arglist and the body of the callback . Effectively, this actually resembles the call interface of the standard Tcl proc command .

ttrace::addscript name body
  他の解釈実行機能に渡される Tcl記述譜を構築する為に活性化された Tcl 呼戻しを登録する｡ この記述譜は Tcl unknown 命令の為の場を設定する為に使われる｡ 登録された呼戻しは､先入先出基準で活性化される｡ 呼戻し定義は､呼戻しの名前 cmd と､呼戻し引数のリスト arglist と､呼戻しの本体body を含む｡　　　　　　　 Registers Tcl callback to be activated for building a Tcl script to be passed to other interpreters . This script is used to set the stage for the Tcl unknown command . Registered callbacks are activated on FIFO basis . The callback definition includes the name of the callback, name and the body of the callback .

ttrace::addresolver cmd arglist body
  積込みすぎた Tcl unknown 命令により活性化される Tcl 呼戻しを登録する｡ 登録された呼戻しは､先入先出基準で活性化される｡ この呼戻しは､原始の決定と現在の解釈実行機能内の原資の積込みに使われる｡　　　　　　　 Registers Tcl callback to be activated by the overloaded Tcl unknown command . Registered callbacks are activated on FIFO basis . This callback is used to resolve the resource and load the resource in the current interpreter .

ttrace::addcleanup body
  trace::cleanup によって活性化される Tcl 呼戻しを登録する｡ 登録された呼戻しは､先入先出基準で活性化される｡　　　　　　　 Registers Tcl callback to be activated by the trace::cleanup . Registered callbacks are activated on FIFO basis .

ttrace::addentry cmd var val
  名前の付いた記憶域内基礎データに項目を追加する｡　　　　　　　 Adds one entry to the named in-memory database .

ttrace::getentry cmd var
  名前の付いた記憶域内基礎データから全ての項目の値を返す｡　　　　　　　 Returns the value of the entry from the named in-memory database .

ttrace::getentries cmd ?pattern?
  名前の付いた記憶域内基礎データから全ての項目の名前を返す｡　　　　　　 Returns names of all entries from the named in-memory database .

ttrace::delentry cmd
  名前の付いた記憶域内基礎データから項目を削除する｡　　　　　　　 Deletes an entry from the named in-memory database .

ttrace::preload cmd
  解釈実行機能内に積込まれる Tcl 命令を登録する｡ この方法で登録された命令は常に解釈実行機能の一部であり､Tcl unknown 命令の要求により積み込みされることはない｡　　　　　　　 Registers the Tcl command to be loaded in the interpreter . Commands registered this way will always be the part of the interpreter and not be on-demand loaded by the Tcl unknown command .

### 論議 DISCUSSION

通常の内観的な状態応答の方法では､実行中の解釈実行機能を内観するために誂えた Tcl記述譜を使い他のどれかの解釈実行機能内でこの状態を複製する為の他のTcl記述譜を合成する｡ この梱包では､そうではなく､ Tcl 命令追跡を使用する｡ 命令追跡は､proc や namespace や load や他の標準(及び/又は 使用者定義の)Tcl 命令の様な選択された Tcl 命令上で登録される｡ 活性化される時､これ等の追跡は記憶域内に生成された原資の基礎データを構築する｡ この基礎データは､要求に応えて､解釈実行機能内で要求された原資を生成する(過積載された) Tcl unknown 命令の為の原資の貯蔵所として使用される｡ この方法で､使用者は一つの多重実行薄片内の､一つの(親の)解釈実行機能を更新することができ､手続函数内の他の多重実行薄片/解釈実行機能にその解釈実行機能の状態を複製することができる｡　　　　　　　 Common introspective state-replication approaches use a custom Tcl script to introspect the running interpreter and synthesize another Tcl script to replicate this state in some other interpreter . This package, on the contrary, uses Tcl command traces . Command traces are registered on selected Tcl commands, like proc, namespace, load and other standard (and/or user-defined) Tcl commands . When activated, those traces build an in-memory database of created resources . This database is used as a resource repository for the (overloaded) Tcl unknown command which creates the requested resource in the interpreter on demand . This way, users can update just one interpreter (master) in one thread and replicate that interpreter state (or part of it) to other threads/interpreters in the process .

この様な方法の手近な利点は､応用譜の実行時の消費記憶域がより小さいことと､多重実行薄片生成がより速いことである｡ 全ての多重実行薄片内で多重実行薄片の初期化時に､必要な手続函数(及び他の原資)を実際には全ては積込まないが､原資が実際に参照された時に参照することにより､記憶域消費と多重実行薄片の初期化時間の両方に重要な進歩が達成された｡ ある試験では､多重実行薄片化Tcl 用譜の記憶域は３倍以上減り､多重実行薄片の初期化時間は５０倍減少した｡ 註意すべきは貴兄の場合は種々異なるかもしれない｡ 他の利点は､親から他の Tcl 多重実行薄片/解釈実行機能に何か(何時)得られるものの詳細な制御を含む｡　　　　　　 Immediate benefit of such approach is the much smaller memory footprint of the application and much faster thread creation . By not actually loading all necessary procedures (and other resources) in every thread at the thread initialization time, but by deferring this to the time the resource is actually referenced, significant improvements in both memory consumption and thread initialization time can be achieved . Some tests have shown that memory footprint of an multithreading Tcl application went down more than three times and thread startup time was reduced for about 50 times . Note that your mileage may vary . Other benefits include much finer control about what (and when) gets replicated from the master to other Tcl thread/interpreters .

### SEE ALSO

thread, tpool, tsv

### KEYWORDS

command tracing, introspection