我正在使用 WPP(预处理器)和 Visual Studio 编译器向基于“Windows 事件跟踪”(ETW)的用户模式应用程序添加跟踪。
此MSDN 内容解释了如何转换现有宏以允许从其中进行跟踪。这里的示例是 CHECK_HR,它获取单个参数 (HR),如果它不为 0,则生成跟踪。
现在,我发现如果参数是多行的,由于 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 并且会出现错误:
wpp_File_cpp18: unknown function
有没有人有解决这个问题的方法?我知道 MSFT 在内部广泛使用 WPP,我想知道他们如何处理这个......