トレース メッセージにプレフィックスとサフィックスを追加する方法

WPP プリプロセッサ 構成ブロックを使用して、トレース メッセージにデータを追加できます。

WPP 構成ブロックは、ソース コードに配置する begin_wpp構成 および end_wpp ステートメントによって定義されます。

//begin_wpp 構成

...

configuration ブロック

...

//end_wpp

構成データをヘッダー ファイルに配置する場合は、プロジェクトのプロパティでヘッダー ファイルの名前を指定します (WPP トレースの場合)。 プロパティ ページの [ファイル オプション] で、 [スキャン構成ファイル] を指定します。 詳細については、 WPP プリプロセッサー をご覧ください。

構成ブロックの構文

//USEPREFIX (Function_Name, "文字列");
イベントのログ記録時に使用する形式文字列プレフィックスを定義します。 最初のパラメーターは、このプレフィックスが適用される関数の名前です。 2 番目のパラメーターは、使用する書式指定文字列です。 既定値を使用するには、%!STDPREFIX!. 既定のトレース メッセージ プレフィックスは、CPU 番号、プロセス ID、スレッド ID、協定世界時 (UTC) 形式のタイム スタンプ、およびコントロール GUID フレンドリ名を指定します。

//USEPREFIX (TRACE_RETURN, "%!STDPREFIX!");

//FUNCFunction_Name{args}(EXP);
トレース関数の名前とそのシグネチャを定義します。 中かっこ { } は、関数の設定値を定義するために使用されます。 次の例では、関数は 1 つの引数を受け取り、書式指定文字列を受け取り、LEVEL を ERROR に設定しています。

//FUNC TRACE_RETURN{LEVEL=ERROR}(EXP);

//USESUFFIX (Function_Name, "Format string");
イベントが記録されるときに使用するフォーマット文字列サフィックスを定義します。 最初のパラメーターは、このサフィックスが適用される関数の名前です。 2 番目のパラメーターは、使用する書式指定文字列です。 コードでは変数名を使用できます。

//USESUFFIX (TRACE_RETURN, "Function Return=%!HRESULT!",EXP);

サンプル構成ブロック

次の例では、書式指定文字列のプレフィックスとサフィックスを使用するトレース マクロを定義します。 トレース マクロを定義する場合は、ロガーを選択し、イベントをログに記録するかどうかをチェックするマクロも定義する必要があります。

//MACRO: TRACE_RETURN
//
//begin_wpp config
//USEPREFIX (TRACE_RETURN, "%!STDPREFIX!");
//FUNC TRACE_RETURN{LEVEL=ERROR}(EXP);
//USESUFFIX (TRACE_RETURN, "Function Return=%!HRESULT!",EXP);
//end_wpp

//
// The next two macros are for checking if the event should be logged, and for
// choosing the logger handle to use when calling the ETW trace API
//
#define WPP_LEVEL_EXP_ENABLED(LEVEL, HR) WPP_FLAG_ENABLED(LEVEL)
#define WPP_LEVEL_EXP_LOGGER(LEVEL, HR) WPP_FLAG_LOGGER(LEVEL)

トレース結果の例

[0]0F78.0460::06/24/2006-15:54:54.880 [tracedrv]Function Return=0x8000000f(STATUS_DEVICE_POWERED_OFF)