次の方法で共有


関数の出入りをトレースする方法

次のサンプル コードは、関数の入退出呼び出しをトレースする方法を示しています。

最初に、 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 プリプロセッサ」を参照してください。