共通デスクトップ環境 ToolTalk メッセージの概要

サーバによる ToolTalk 呼び出しとメッセージのトレース

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

トレースするセッション。デフォルトではデフォルト・セッション、つまり tt_open が通知するセッションです。

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_accepttt_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 は、その結果を示します。


例 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 のとおりです。


例 4-2 ttsession によるトレースの表示

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" は、デフォルトではない特定のトレースされるセッションです。