6.6. デバッグ支援 - PiaTransport のトレース

概要

ここでは PiaTransport と深く関わりのある部分のトレースについて解説します。トレースの基本的な内容につきましては、2. PiaCommon 編 の2.2. ログ出力 を参照してください。

パケットのトレース

Pia におけるパケットとは、Pia における通信での送受信単位です。このパケット送信/受信に関連するトレースを出力する際は、以下のように記述します。

コード 6-26. パケットのトレースフラグ設定
nn::pia::common::Trace::GetInstance()->SetFlag(
    nn::pia::common::TraceFlagTransportPacketSend |
    nn::pia::common::TraceFlagTransportPacketReceive
);

これらのトレースフラグを有効にしてプログラムを動作させると、送受信されたパケットの情報をログに残すことができます。パケットのトレース出力は以下のようになります。

コード 6-27. パケットのトレース出力
// 送信のログの例:
[Pia] SendPacket Dest:  1/00000002/   192.168.87.2:52447/    0 Size:  84 SID:001c CID:c4 TTL:  0 ProtocolId:20000000

// 受信のログの例:
[Pia] ReceivePacket Src:   192.168.87.2:52447/    0 Size:  84 SID:0044 CID:4c ProtocolId:20000000

プロトコルメッセージのトレース

Pia におけるプロトコルメッセージとは、Pia のプロトコルにおける通信データ単位です。宛先ステーションが同じプロトコルメッセージは1つのパケットにまとめられて送信され(パケットバンドリング)、受信されたパケットはプロトコルメッセージに分解されます。このプロトコルメッセージ送信/受信に関連するトレースを出力する際は、以下のように記述します。

コード 6-28. プロトコルメッセージのトレースフラグ設定
nn::pia::common::Trace::GetInstance()->SetFlag(
    nn::pia::common::TraceFlagTransportProtocolmessageSend |
    nn::pia::common::TraceFlagTransportProtocolmessageReceive
);

これらのトレースフラグを有効にしてプログラムを動作させると、送受信されたプロトコルメッセージの情報をログに残すことができます。プロトコルメッセージのトレース出力は以下のようになります。

コード 6-29. プロトコルメッセージのトレース出力
// 送信のログの例:
[Pia] CP Dest:  1/00000002/   192.168.87.2:52447/    0 Size:  68 SID:001c CID:c4
[Pia]       0-  56(  33) 20000000   0(00349047)->00000002(B) --- 00000000

// 受信のログの例:
[Pia] PP Src:   192.168.87.2:52447/    0 Size:  68 SID:0045 CID:4c o
[Pia]       0-  56(  33) 20000000   1(0034904d)->00000001(B) --- 00000000

トレース時の注意点

トレース機能はバグ追跡などの目的には非常に有用ですが、トレースを大量に出力すると、処理限界によって CPU 処理負荷が上昇し、パケロス率が悪化します。ですが、Pia で用意しているコンソール出力のキャッシュ機能を使用すると、この状況を大きく改善できます。詳細は 2.2. ログ出力 のキャッシュプリントについての説明を参照してください。