関数の出入りをトレースする方法
次のサンプル コードは、関数の入退出呼び出しをトレースする方法を示しています。
最初に、 WPP_CONTROL_GUIDS マクロの定義をソース ファイルまたはヘッダー ファイルに追加します。 トレース フラグを定義するときは、次の例に示すように、関数トレースのフラグを定義します。
#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID(CtlGuid,(a044090f,3d9d,48cf,b7ee,9fb114702dc1), \
WPP_DEFINE_BIT(ERROR) \
WPP_DEFINE_BIT(Unusual) \
WPP_DEFINE_BIT(Noise) \
WPP_DEFINE_BIT(FuncTrace) )
次に、同じファイルに、トレース メッセージの構成データを追加します。 構成データを begin_wpp config ステートメントで開始し、 end_wpp ステートメントで終了します。 次に、FuncTrace をサポートするマクロの定義を追加します。
// begin_wpp config
// FUNC FuncEntry();
// FUNC FuncExit();
// USESUFFIX(FuncEntry, " Entry to %!FUNC!");
// USESUFFIX(FuncExit, " Exit from %!FUNC!");
// end_wpp
// Map the null flags used by Entry/Exit to a function called FuncTrace
#define WPP__ENABLED() WPP_LEVEL_ENABLED(FuncTrace)
#define WPP__LOGGER() WPP_LEVEL_LOGGER(FuncTrace)
ソース ファイルで、関数コードを FuncEntry() 呼び出しと FuncExit() 呼び出しで囲みます。
#include "mytrace.h"
#include "entryexit.tmh"
void examplesub(int x)
{
FuncEntry();
// function code
FuncExit();
}
次に例を示します。
#include "mytrace.h"
#include "entryexit.tmh"
void examplesub(int x)
{
FuncEntry();
DoTraceMessage(Noise, "Value is %d",x);
FuncExit();
}
構成データをヘッダー ファイルに配置する場合は、 -scan パラメーターを使用して、指定されたファイル内の構成データを検索するように WPP に指示します。 この例では、構成データは mytrace.h ファイルにあります。
RUN_WPP=$(SOURCES) -km -scan:mytrace.h
注 ユーザー モード アプリケーションまたはダイナミック リンク ライブラリ (DLL) の RUN_WPP ディレクティブに -km スイッチを指定しないでください。
RUN_WPP のオプション パラメーターの完全なリストについては、 「WPP プリプロセッサ」を参照してください。