tkinspect

tkinspectは、Tkアプリケーションのデバッグをしたり、スクリプトの構造を解析するツールです。
Tcl/Tk 8.0以降とincr Tcl/Tk 3.0以降のTkアプリケーションに対応していると思われます。

tkinspectは、Tkのsendコマンドを使いTkアプリケーションのプロシジャや変数等の情報をブラウズします。
アプリケーションの変数の変更やトレースおよびTkアプリケーションへコマンドの送信ができます。

tkinspectに表示できる情報は、以下から選択できます。

以下のスクリーンショットは、Proc, Global, Window, Imageリストを表示した状態です。

tkinspect

Tkアプリケーション側の準備

tkinspectで解析するTkアプリケーションは、DDE、COMまたはSocketを使って通信を行うので、
通信のための手続きが必要になります。
DDEを使う場合、Tkアプリケーションに以下のような記述が必要です。

package require dde
dde servername MyApplication

MyApplicationの部分はユニークな名前を与えます。

COMを使う場合、winsend等の拡張パッケージを別途用意し、
Tkアプリケーションに以下のような記述が必要です。

package require winsend
winsend appname MyApplication

Socketを使う場合は、tkcon等のコンソール・アプリケーションが必要になります。
tkconで以下のようにTkアプリケーションを実行します。通信にはTcllibのcommパッケージを使います。

source MyApplication.tcl
package require comm
comm::comm self
=> 3802

このとき、comm::comm selfの結果の数字(ポート番号)を、
tkinspectのFileメニュー→Connect to commメニューで開いたダイアログに入力してやる必要があります。

Connect to Interpダイアログ

tkinspect側の準備

tkinspectのFileメニュー→Select Interpreter (send)メニューに表示されるTkアプリケーションを選択します。
後は、見たい情報リストをFileメニューで選択するだけです。設定はこれだけです。

便利な機能

Command:にコマンドを入力し、Send Commandボタンを押すことで、
Tkアプリケーションにコマンドを送信して実行できます。
コマンドの結果はValueウィンドウに表示されます。

Globalsリストから変数を選択し、Valueウィンドウでその変数値を変更した後に、
Send Valueボタンを押すことで、Tkアプリケーションの変数値を変更できます。

GlobalsメニューのTrace Variableを選択すると変数のトレースウィンドウが開きます。
トレースウィンドウは、変数値の変化をリアルタイムにトレースします。

Traceウィンドウ

Widnowsリストからウィンドウを選択すると、Tkアプリケーションの対象ウィンドウが強調表示されます。

Window強調表示

このように、tkinspectを使ってTkアプリケーションのブラウズとインスペクトが可能なのです。
このような強力なツールはActiveTclに同梱して欲しいものです。

参考文献