我正在使用WPP(预处理器)和visual studio编译器为基于“Windows事件跟踪”(ETW)的用户模式应用程序添加跟踪。
此MSDN content解释了如何转换现有宏以允许从其中进行跟踪。示例中有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,我想知道他们是如何处理这个......
答案 0 :(得分:0)
我试图重现这个问题,没有成功 - 多行WPP调用对我有用,所以你得到的错误似乎有点奇怪。您是否以任何方式修改了CHECK_HR
宏?
你可以尝试在每一行电话的末尾添加斜杠:
CHECK_HR(DoSomething(a, \
b, \
c));
此外,在您的示例中,您缺少一个右括号,这会导致WPP_CALL_blahblah_undefined。但很有可能在这个例子中只是一个错字。