ToolTalkトレースの使い方 ToolTalk ttsessionトレース ttsessionトレースは、ToolTalkパターンをttsessionにある各メッセージと 一致させ配信する方法を示します。本リリースのToolTalkトレースは次のことを行い ます。 単一クライアントのToolTalkとの対話を表示します。この機能により、実行者は1つ のクライアントだけをトレースできます。 ttsessionトレースを、たとえばメッセージ型、送信者、または受信者ごとといった フィルタに通します。 ToolTalkトレースへのアクセス 本リリースの新規コマンドである tttrace ToolTalkコマンド tttrace tttraceは、おもにToolTalkトレースへのアクセスに 使用します。このコマンドは、用途やコマンド行インタフェースの点で、 trussコマンド trussコマンドに似ています。このコマンドにより、3 種類のToolTalkトレースをコントロールできます。 tttraceコマンド tttraceコマンドには、 サーバ・モード サーバ ・モードと クライアント・モード クライアント・モードの2つの基本 モードがあります。 サーバ・モードでは、Session_Trace要求を送信することによって、 tttraceが指定されたセッションのトレースを指示します。 クライアント・モードでは、tttraceは環境変数を設定し、コマ ンド行に指定されたToolTalkクライアント・コマンドを実行します。実行されたクライアン トの環境変数は、クライアント・メッセージとクライアントAPI呼び出しをトレースするか どうかとその方法を libtt libttに指示します。 tttraceは、旧バージョンのサーバや、 libttの旧バージョンを使用するクライアントとの下位互換性はありま せん。tttraceは旧バージョンのサーバを検出して診断する一方で、 libttの旧バージョンを使用するクライアント上で何も通知せずに 異常終了します。. トレースのコントロール libttトレースのコントロール libttトレースの動作をコントロールする方法の1つは、 環境変数 $DT_TT_TRACE_SCRIPT 環境変数 $ $DT_TT_TRACE_SCRIPT TT_TRACE_SCRIPTを設定することです。 libttのトレースは、変数の値が正確でなかったり、一貫性が ない場合は異常終了します。 クライアント側トレースのコントロール The tt_trace_control呼び出し tt_trace_control呼び出しは、内部フラグを設定また はクリアして、すべてのクライアント側トレースをコントロールします。この呼び出しを 使用して、コード内の問題の領域をトレースします。この呼び出しの形式は次のとおりで す。 int tt_trace_control(int option) optionの値として0を指定するとトレースをオフ にし、1を指定するとトレースをオンにします。-1を指定すると、トレースのオンとオフを 切り替えます。トレースがオンの場合は、トレースの範囲を tttraceコマンド TT_TRACE_SCRIPT変数かトレースファイルでコントロー ルします。この呼び出しは、トレース・フラグの以前の設定を返します。 ToolTalkセッション内のメッセージ・トラフィックのトレース Session_Trace要求 Session_Trace要求は、ttsessionがそれ自身を処理するために登録する ToolTalk要求です。つまり、ttsessionはSession_Trace要求のハンドラです。この要求は、 どのToolTalkクライアントでも送信できます。お勧めできる方法ではありませんが、この 要求を処理するために他のToolTalkクライアントを登録できます。(注:この方法では トレースは行われません。)この要求の構文は次の とおりです。 [file] Session_Trace( in boolean on, in boolean follow [in attribute toPrint |in state toTrace |in op toTrace |in handler_ptype toTrace |in sender_ptype toTrace][...] ); Session_Trace要求は、配信範囲指定されたセッションでのメッセージ・トレースを オンまたはオフにします。 トレースがオンで、要求のファイル属性が設定されている場合、後続のトレース出力 は属性が名前を付けたファイルに付け加えられます。 トレースがオンで、ファイル属性が設定されていない 場合、トレースは現在のトレースを続行します。 デフォルトの場合、デーモン・モードではttsessionを実行中 のホストのコンソールが出力先になります。ジョブ・コントロール・モードでは、 ttsessionの標準エラーが出力先になります。 は、この要求の必須 およびオプションの引き数を示しています。 Session_Trace引き数 引き数 説明 boolean on 必須 トレースをオンまたはオフにします。toTrace引き数 がなくonがtrueの場合は、前のトレース設定が復元されます。 boolean follow 必須 起動したクライアントのクライアント側トレースをオンにします。 attribute toPrint オプション トレースされた各メッセージの属性を出力します。 有効な属性は次のとおりです。none–トレースされた各メッセージの記述を1行だけ 出力(デフォルト)all–トレースされたメッセージの属性全部を出力 state toTrace オプション メッセージをトレースするための状態。 tt_c.hに定義されているTt_statesの他に有効な 状態は次のとおりです。edge–初期の状態(TT_SENT) と最後の状態(TT_HANDLED, TT_FAILED) を入力しているメッセージdeliver–すべての状態の変更と、すべてのクライアントの 配信dispatch–deliver状態および一致 するように考慮されたすべてのパターン(デフォルト) op toTracesender_ptype toTracehandler_ptype toTrace オプションオプションオプション 表示されたメッセージの属性の値としてtoTraceを 持っているトレース・メッセージ•要求には、toTrace引き数を任意の数だけ 含めることができます。• toTraceにはsh(シェル)のワイルドカード文字も指定できます。• 指定のメッセージ属性に対してtoTrace引き数がない場合、トレースから メッセージを除外する属性の値もありません。
現在のセッション・トレースの動作には、この要求が失敗しない場合にのみ変更され ます。失敗した場合には、応答のtt_message_status は、 で説明されている エラーの1つに設定されます。 Session_Trace要求が返すエラー・メッセージ エラー 説明 TT_ERR_NO_MATCH エラー TT_ERR_NO_MATCH TT_ERR_NO_MATCH 要求に対するハンドラを見つけることができません。 TT_ERR_APPFIRST + EACCES エラー TT_ERR_APPFIRST + EACCES TT_ERR_APPFIRST + EACCES ttsessionがトレース・ファイルを開くまたは作成するためのアクセス権を 持っていません。 TT_ERR_APPFIRST + EISDIR エラー TT_ERR_APPFIRST + EISDIR TT_ERR_APPFIRST + EISDIR トレース・ファイルがディレクトリです。 TT_ERR_APPFIRST + ENOSPC エラー TT_ERR_APPFIRST + ENOSPC TT_ERR_APPFIRST + ENOSPC ターゲット・ファイル・システムにトレース・ファイル作成の 十分なスペースがありません。 TT_ERR_APPFIRST + EEXIST エラー TT_ERR_APPFIRST + EEXIST TT_ERR_APPFIRST + EEXIST トレースがすでに別のファイルで行われています。 ttsessionは、応答のファイル属性を再設定して既存のトレース・ファイルの名前を付け ます。別のファイルへのトレースを行うには、最初に現在のトレース・ファイルへの トレースをオフにします。
サーバによるToolTalk呼び出しとメッセージのトレース tttrace関数 ToolTalk関数 tttrace tttrace関数は、指定のToolTalkセッションのために サーバによりメッセージ・トラフィックをトレースするか、ToolTalkクライアント・トレー スをオンにしてコマンドを実行します。セッションとコマンドの両方とも指定されない場合 は、デフォルトのセッションがトレースされます。デフォルトでは、tttrace が終了するとトレースも終了します。この関数の構文は次のとおりです。 tttrace [-0FCa] [-o outfile ] [-S session | command] tttrace [-e script | -f scriptfile ] [-S session | command] では、 tttraceオプションにつて説明します。 tttraceオプション Option Description -0 セッション内のメッセージ・トレースをオフにするか、メッセージ・トレー スを行わないで(つまり呼び出しのトレースだけを行って)指定コマンドを実行します。 -F 指定のコマンドによってフォークされた、またはttsessionによりセッション 内で続けて起動されたすべての子を追跡します。通常、指定のコマンドだけかttsession インスタンスがトレースされます。-Fオプションが指定されている 場合、プロセスIDがトレース出力の各行に表示され、どのプロセスが生成したかを示しま す。 -C ToolTalk APIへのクライアント呼び出しをトレースしないようにします。 デフォルトでは呼び出しをトレースします。 -a トレースされたメッセージのすべての属性、引き数、およびコンテキスト・ スロットを出力します。デフォルトでは、トレース出力へメッセージを出力するには単一 行だけを使用します。 -o outfile トレース出力に使用されるファイル。セッション・トレースの場合、出力先 はtttraceの標準出力です。 -S session トレースするセッション。デフォルトではデフォルト・セッション、つまり tt_open tt_openが通知するセッションです。 command 起動し、トレースを行うToolTalkクライアント・コマンド。 -e script ttrace設定として使用されるスクリプト。 -f scriptfile tttrace設定を読み取るファイル。
tttraceは、ttsessionへのメッセージ・インタフェースと TT_TRACE_SCRIPT環境変数 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 は、ディスパッチ・ トレース中に受信するメッセージについて説明しています。 ディスパッチ・トレース用の理由 メッセージ 説明 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 は、その結果を示し ます。 パターンの登録と通知の送信 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's view 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.jOHHM 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> mylientprogramのメッセージ・フローの表示は、 のとおりです。 トレースされた最初のメッセージは、ほとんどの場合tttrace が送信した要求への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“は、デフォルトではない 特定のトレースされるセッションです。 “01 15303 1342177284 1 0 13691 129.144.153.55 2“ is the
ToolTalkトレースのための設定 tttraceスクリプトには、ToolTalk呼び出しとメッセージをコン トロールする設定があります。tttraceスクリプトは、セミコロンか 復帰改行で区切られたコマンドから成ります。重複している値が設定に指定されると、最後 の値が使用されます。 では、これらのコマンド について説明します。 tttraceスクリプト・コマンド コマンド 説明 version n 使用されているtttracefileコマンド構文のバーショ ン。現在のバージョンは1です。 follow [off | on] トレースされたクライアントによってフォークされた、またはトレースされ たセッションで続けて起動されたすべての子についても追跡するかどうか設定します。 デフォルトはoffです。 [> | >>] outfile トレース出力に使用されるファイル。デフォルトでは、トレースの出力先は 標準エラーです。>>>の通常のシェル解釈 が適用されます。 functions [all | none | func...] トレースするToolTalk API関数。funcには、シェル・ ワイルドカード文字が入ります。デフォルトはallです。 attributes [all | none] none(デフォルト)は、トレース出力にメッセージを 出力するとき、単一行だけを使用することを意味します。allは、 トレースされたメッセージの属性、引き数、コンテキスト・スロットすべてを出力すること を意味します。 states [none | edge | deliver | dispatch | Tt_state]... メッセージをトレースするための状態。tt_c.hに定議 されているTt_statesの他に有効な状態は次のとおりで す。none – メッセージのトレースをすべ て使用不可能にするedge – 最初の状態 (TT_SENT)と最後の状態(TT_HANDLEDTT_FAILED)を入力しているメッセージdeliver – すべての状態の変更と、すべての クライアントの配信dispatch – 配信およ び一致するように考慮されたすべてのパターン(デフォルト) ops toTrace...sender_ptypes toTrace...handler_ptypes toTrace... 表示されたメッセージの属性としてtoTraceを持って いるトレース・メッセージ。toTraceにはシェル・ワイルドカード 文字が入ります。指定のメッセージ属性に対してtoTrace 引き数がない場合、その属性がどんな値を持っていてもメッセージをトレースから除外する ことはありません。