次の方法で共有


カスタムの WPP 拡張書式指定文字列を作成する方法

DEFINE_CPLX_TYPE マクロを使用して、カスタム WPP 拡張書式指定文字列を作成します。 このマクロの使用方法の詳細については、「複合型定義の構文とは ?」を参照してください。

このトピックでは、次の操作を行う方法を示す例を示します。

これらの各例では、DEFINE_CPLX_TYPE マクロの定義にカスタム WPP 構成ファイルを使用する方法を示します。 これらの例では、構成ファイルの名前は LocalWpp.ini です。 カスタム WPP 構成ファイルの使用方法の詳細については、「カスタム データ型を定義する方法」を参照してください。

カスタム WPP 拡張書式指定文字列を使用して固定長文字列をトレースする

この例では、カスタム WPP 拡張形式仕様文字列を使用して、インターネット プロトコル バージョン 6 (IPv6) ネットワーク アドレスをトレースする方法を示します。 in6_addr構造体で定義されている IPv6 ネットワーク アドレスの固定長は 16 バイトです。

この例では、複合データ型 (IPV6ADDR) が定義されており、これを %!IPV6ADDR! として使用できます。 ソース コードの書式指定文字列。

IPV6ADDR複合データ型を作成するには、LocalWpp.ini構成ファイルに次のステートメントを追加します。

  1. DEFINE_CPLX_TYPE(IPV6ADDR, WPP_LOGIPV6, in6_addr *, ItemIPV6Addr, "s", _IPV6_, 0, 1);

    このステートメントでは、DEFINE_CPLX_TYPE マクロを使用して、複合型 (IPV6ADDR) とその属性 (引数の型 (in6_addr *) やサイズ (16) など) を定義します。

    また、このステートメントは、 トレース プロバイダーのソース コードで IPV6ADDR 複合型を解析するときに WPP プリプロセッサによって使用されるヘルパー マクロ (WPP_LOGIPV6) の 名前も指定します。

  2. WPP_FLAGS(-DWPP_LOGIPV6(x) WPP_LOGPAIR( (16), (x)));

    このステートメントは、IPV6 引数が TraceMessage 関数に渡されるときに、引数の長さとアドレスのペアの書式を設定するために使用されるヘルパー マクロを定義します。

Visual Studio で、プロジェクトの [プロパティ ページ] ダイアログを開きます。 [WPP トレース][ファイル オプション] で、 追加の構成ファイルとしてLocalWpp.iniを指定します。 詳細については、 WPP プリプロセッサー をご覧ください。

次のサンプル ソース コードは、 トレース プロバイダ が %!IPV6ADDR! を使用して IPv6 ネットワーク アドレスをトレースする方法を示しています。 書式指定文字列:

struct in6_addr IPAddressV6 = {0};
DoTraceMessage(Noise, "IN6_ADDR  = %!IPV6ADDR!", &IPAddressV6);

注: 固定長メディア アクセス制御 (MAC) アドレスをトレースするための複合型 (MACADDR) を作成できます。 この複合型は、IPV6ADDDR複合型に使用されたプロシージャに従って指定できます。

カスタム WPP 拡張書式指定文字列を使用して可変長文字列をトレースする

この例では、カスタム WPP 拡張書式指定文字列を使用して、データの可変長バッファーをトレースする方法を示します。

この例では、%!HEXDUMP! として使用できる複合データ型 (HEXDUMP) が定義されています。 ソース コードの書式指定文字列。

HEXDUMP複合データ型を作成するには、LocalWpp.ini構成ファイルに次のステートメントを追加します。

  1. DEFINE_CPLX_TYPE(HEXDUMP, WPP_LOGHEXDUMP, const xstr_t&, ItemHEXDump,"s", _HEX_, 0, 2);

    このステートメントでは、DEFINE_CPLX_TYPE マクロを使用して、複合型 (HEXDUMP) とその属性 (引数の型 (const xstr_t&) や TraceMessage (2) に渡されるパラメーターの数など) を定義します。 この複合型は可変長データに使用されるため、マクロの Size 要素は 0 に設定されます。

    ステートメントでは、 トレース プロバイダーのソース コードで HEXDUMP 複合型を解析するときに WPP プリプロセッサによって使用されるヘルパー マクロ (WPP_LOGHEXDUMP) の 名前も指定します。

  2. struct xstr_t {
       CHAR * _buf;
       short _len;
       xstr_t(__in_ecount(len) char *buf, short len):_buf(buf),_len(len) {}
    };

    このステートメントは、可変長バッファーの長さとアドレスを保存するために使用される構造体を定義します。 この構造体は、LOG_LENSTR マクロで初期化され、 FormatString パラメーター内で HEXDUMP 複合型が使用される DoTraceMessage の各呼び出しに対してローカルです。

  3. WPP_FLAGS(-DLOG_LENSTR(len,str)=xstr_t(str,len));

    このステートメントは、可変長バッファーのxstr_t構造体を初期化するために使用されるマクロを定義します。 DoTraceMessageVariableList パラメーターに可変長バッファーを渡すには、このマクロを使用する必要があります。

  4. WPP_FLAGS(-DWPP_LOGHEXDUMP(x) WPP_LOGPAIR(2,&(x)._len) WPP_LOGPAIR((x)._len, (x)._buf));

    このステートメントは、 TraceMessage 関数に渡されるときに可変長バッファー引数の長さとアドレスのペアの書式を設定するために使用されるヘルパー マクロを定義します。

    可変長引数には、2 つの長さ/アドレスペアが必要です。 その結果、WPP_LOGHEXDUMP マクロは、次の方法でWPP_LOGPAIRする 2 つの呼び出しを定義します。

    • WPP_LOGPAIRの最初の呼び出しは、可変長バッファーのサイズを渡します。
    • WPP_LOGPAIRの 2 番目の呼び出しは、バッファー自体のアドレスを渡します。

    この マクロでは、LOG_LENSTRの呼び出しによって可変長バッファーのxstr_t構造体が初期化されている必要があります。 その結果、LOG_LENSTR マクロを介して可変長バッファーを DoTraceMessage に渡す必要があります。

Visual Studio で、プロジェクトの [プロパティ ページ] ダイアログを開きます。 [WPP トレース][ファイル オプション] で、 追加の構成ファイルとしてLocalWpp.iniを指定します。 詳細については、 WPP プリプロセッサー をご覧ください。

次のサンプル ソース コードは、 トレース プロバイダ が %!HEXDUMP! を使用してデータのバッファをトレースする方法を示しています。 書式指定文字列:

CHAR HexDump[1024] = {0, 1, 2, 3, 4, 5, 6, 7} ;
DoTraceMessage(Noise, "HEXDUMP: %!HEXDUMP! ", LOG_LENSTR(sizeof(HexDump),(PCHAR)HexDump));

注: 可変長バッファーをトレースするための複合型 (HEXBYTES) を作成できます。 この複合型は、 HEXDUMP複合型に使用されたプロシージャに従って指定できます。