ttrace 関数は、指定の ToolTalk セッションのためにサーバによりメッセージ・トラフィックをトレースするか、ToolTalk クライアント・トレースをオンにしてコマンドを実行します。セッションとコマンドの両方とも指定されない場合は、デフォルトのセッションがトレースされます。デフォルトでは、ttrace が終了するとトレースも終了します。この関数の構文は次のとおりです。
tttrace [-0FCa] [-o outfile ] -S session | command] tttrace [-e script | -f scriptfile ] [-S session | command]
表 4-3 では、ttrace オプションについて説明します。
表 4-3 tttrace オプション
オプション |
説明 |
---|---|
-0 |
セッション内のメッセージ・トレースをオフにするか、メッセージ・トレースを行わないで (つまり呼び出しのトレースだけを行なって) 指定のコマンドを実行します。 |
-F |
指定のコマンドによってフォークされた、または ttsession によりセッション内で続けて起動されたすべての子を追跡します。通常、指定のコマンドだけか ttsession インスタンスがトレースされます。-F オプションが指定されている場合、プロセス ID がトレース出力の各行に表示され、どのプロセスが生成したかを示します。 |
-C |
ToolTalk API へのクライアント呼び出しをトレースしないようにします。デフォルトでは呼び出しをトレースします。 |
-a |
トレースされたメッセージのすべての属性、引き数、およびコンテキスト・スロットを出力します。デフォルトでは、トレース出力へメッセージを出力するには単一行だけを使用します。 |
-o outfile |
トレース出力に使用されるファイル。セッション・トレースの場合、出力先は tttrace の標準出力です。 |
-S session | |
command |
起動し、トレースを行う ToolTalk クライアント・コマンド |
-e script |
ttrace 設定として使用されるスクリプト |
-f scriptfile |
ttrace 設定を読み取るファイル |
ttrace は、ttsession へのメッセージ・インタフェースと TT_TRACE_SCRIPT 環境変数を使用する ToolTalk クライアントとして実行できるようになっています。この変数が設定されると、トレース・スクリプトに指定されているようにクライアント側トレースをオンにすることを libtt に通知します。値の最初の文字が「.」か「/」の場合、その値は使用するトレース・スクリプトが入っているファイルのパス名として認識されます。その他の文字の場合は、インライン・トレース・スクリプトとして認識されます。
次は、トレースされた ToolTalk 関数の例です。
[pid] function_name(params) = return_value (Tt_status)
-a オプションは、次のように 1 行のメッセージ要約の後にメッセージ属性を出力します。
Tt_state Tt_paradigm Tt_class (Tt_disposition in Tt_scope) : status == Tt_status
状態の変更は次の形式で示されます。
old_state => new_state.
配信は次のように示されます。
Tt_message => procid recipient_procid
表 4-4 は、ディスパッチ・トレース中に受信するメッセージついて説明しています。
表 4-4 ディスパッチ・トレース用の理由
メッセージ |
説明 |
---|---|
tt_message_send |
送信するメッセージ |
tt_message_reject |
メッセージが拒否されました。 |
tt_message_fail |
メッセージが無視されました。 |
tt_message_reply |
メッセージへの応答 |
tt_session_join |
参加するセッション |
tt_file_join |
参加するファイル |
tt_message_reply |
クライアントが指定の関数を呼び出しました。 |
tt_message_send_on_exit |
ttsession は、tt_close を呼び出す前に切り離されたクライアントに対して on_exit メッセージをディスパッチしています。 |
tt_message_accept |
ttsession は、ptype が起動されている間にブロックされたメッセージをディスパッチしています。起動されたクライアントは、ptype がブロック解除されることを示す tt_message_accept か tt_message_reply のどちらかを呼び出します。 |
TT_ERR_PTYPE_START |
ptype インスタンスがメッセージの受信のために起動されましたが、起動コマンドは ttsession に接続される前に終了しました。 |
TT_ERR_PROCID |
ttsession はこの要求に応じて動作中であったクライアントとの接続を切りました。 |
ttsession -> ttsession |
別のセッションが、このセッションに対してメッセージの受信者を見つけるように求めています。 |
ttsession <- ttsession |
別のセッションが、このセッションで発信したメッセージの更新 (たとえば失敗すること) を求めています。 |
ディスパッチがトレースされているとき、照合は次の形式のうちの 1 つで示されます。
Tt_message & Tt_pattern { Tt_message & ptype ptid { Tt_message & otype otid {
パターンまたはシグニチャーが次の形式で出力されます。
} == match_score; [/* mismatch_reason */]
この節では、tttrace 関数の使用例を取り上げます。
パターンを登録し、そのパターンに一致するという通知を送信するには、次のように入力します。
% tttrace -a myclientprogram
例 4-1 は、その結果を示します。
tt_open() = 0x51708=="7.jOHHM X 129.144.153.55 0" (TT_OK) tt_fd() = 11 (TT_OK) tt_pattern_create() = 0x50318 (TT_OK) tt_pattern_category_set(0x50318, TT_OBSERVE) = 0 (TT_OK) tt_pattern_scope_add(0x50318, TT_SESSION) = 0 (TT_OK) tt_pattern_op_add(0x50318, 0x2f308=="Hello World") = 0 (TT_OK) tt_default_session() = 0x519e0=="X 129.144.153.55 0" (TT_OK) tt_pattern_session_add(0x50318, 0x519e0=="X 129.144.153.55 0") = 0 (TT_OK) tt_pattern_register(0x50318) = 0 (TT_OK) tt_message_create() = 0x51af0 (TT_OK) tt_message_class_set(0x51af0, TT_NOTICE) = 0 (TT_OK) tt_message_address_set(0x51af0, TT_PROCEDURE) = 0 (TT_OK) tt_message_scope_set(0x51af0, TT_SESSION) = 0 (TT_OK) tt_message_op_set(0x51af0, 0x2f308=="Hello World") = 0 (TT_OK) tt_message_send(0x51af0) ... TT_CREATED => TT_SENT: TT_SENT TT_PROCEDURE TT_NOTICE (TT_DISCARD in TT_SESSION): 0 == TT_OK id: 0 7.jOHHM X 129.144.153.55 0 op: Hello World session: X 129.144.153.55 0 sender: 7.jOHHM X 129.144.153.55 0 = 0 (TT_OK) tt_message_receive() ... Tt_message => procid <7.jOHHM X 129.144.153.55 0> TT_SENT TT_PROCEDURE TT_NOTICE (TT_DISCARD in TT_SESSION): 0 == TT_OK id: 0 7 jOHHM X 129.144.153.55 0 op: Hello World session: X 129.144.153.55 0 sender: 7.jOHHM X 129.144.153.55 0 pattern: 0:7.jOHHM X 129.144.153.55 0 = 0x51af0 (TT_OK)
ttsession によるメッセージ・フローの表示を見るには、次のように入力します。
% tttrace -a
ttsession による mylientprogram のメッセージ・フローの表示は、例 4-2 のとおりです。
tt_message_reply: TT_SENT => TT_HANDLED: TT_HANDLED TT_PROCEDURE TT_REQUEST (TT_DISCARD in TT_SESSION): 0 == TT_OK id: 0 2.jOHHM X 129.144.153.55 0 op: Session_Trace args: TT_IN string: "> /tmp/traceAAAa002oL; version 1; states"[...] session:X 129.144.153.55 0 sender: 2.jOHHM X 129.144.153.55 0 pattern:0:X 129.144.153.55 0 handler:0.jOHHM X 129.144.153.55 0 Tt_message => procid <2.jOHHM X 129.144.153.55 0> tt_message_send: TT_CREATED TT_PROCEDURE TT_NOTICE (TT_DISCARD in TT_SESSION): 0 == TT_OK id: 0 7.jOHHM X 129.144.153.55 0 op: Hello World session:X 129.144.153.55 0 sender: 7.jOHHM X 129.144.153.55 0 TT_CREATED => TT_SENT: TT_SENT TT_PROCEDURE TT_NOTICE (TT_DISCARD in TT_SESSION): 0 == TT_OK id: 0 7.jOHHM X 129.144.153.55 0 op: Hello World session:X 129.144.153.55 0 sender: 7.j HHM X 129.144.153.55 0 Tt_message & Tt_pattern { id: 0:7.jOHHM X 129.144.153.55 0 category:TT_OBSERVE scopes: TT_SESSION sessions:X 129.144.153.55 0 ops: Hello World } == 3; Tt_message => procid <7.jOHHM X 129.144.153.55 0>
トレースされた最初のメッセージは、ほとんどの場合 ttrace が送信した要求への ttsession による応答になります。
特定の、デフォルトではないセッション内のメッセージ・フローをトレースするには、次のように入力します。
% tttrace -S "01 15303 1342177284 1 0 13691 129.144.153.55 2"
"01 15303 1342177284 1 0 13691 129.144.153.55 2" は、デフォルトではない特定のトレースされるセッションです。