2011-01-21 6 views
2

WPP(プリプロセッサ)とビジュアルスタジオコンパイラを使用した「Windowsのイベントトレース」(ETW)に基づくユーザーモードアプリケーションにトレースを追加しています。WPPトレース中のマルチラインMACROのサポートなし

このMSDN contentは、既存のマクロを変換して、その中からトレースできるようにする方法を説明しています。 1つの引数(HR)を取得し、それが0でない場合にトレースを生成するCHECK_HRの例があります。

ここで、引数が複数行の場合、生成されたプリプロセッサ関数は機能しませんWPPの仕組みに起因しています。しかし、私はそのような問題への参照を見つけることができませんでした!

CHECK_HR(DoSomething(a,b,c)); // works 
CHECK_HR(DoSomething(a, 
    b, c)); // don't work 

問題は、マクロがFile.cpp WPPの17行でプリプロセッサにより検出された場合、それはwpp_File_cpp17のようなものと呼ばれる関数を生成し、マクロから呼び出すLINEを使用していることです。上記のようにしかし、複数行のマクロのために__ LINE__ 18になり、1はエラーが発生します。

wpp_File_cpp18: unknown function 

は、誰もがこの問題の回避策を持っていますか?私はMSFTがWPPを広く内部的に使用していることを知っています。私は彼らがどのようにこれを処理するのだろう...

+0

DDKサンプルでも複数行マクロをサポートしていない動作を確認しました。 –

答えて

0

私はこの問題を成功裏に再現しようとしました。奇妙などのようにしてCHECK_HRマクロを修正しましたか?あなたは、コールの各行の末尾にスラッシュを入れてみてください可能性が

CHECK_HR(DoSomething(a, \ 
        b, \ 
        c)); 

また、あなたの例では、閉じカッコが欠落している、これはWPP_CALL_blahblah_undefinedが発生します。しかし、これはほとんどの場合、この例の入力ミスです。

+0

興味深い!どのバージョンのDDKを使用しますか? –

+0

私はWindows 8 DDK(コンシューマープレビュー)を使用しています。 – kurczak