在WPP跟踪期间不支持多行MACRO

时间:2011-01-21 07:53:40

标签: visual-studio visual-c++ logging tracing etw

我正在使用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,我想知道他们是如何处理这个......

1 个答案:

答案 0 :(得分:0)

我试图重现这个问题,没有成功 - 多行WPP调用对我有用,所以你得到的错误似乎有点奇怪。您是否以任何方式修改了CHECK_HR宏?

你可以尝试在每一行电话的末尾添加斜杠:

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

此外,在您的示例中,您缺少一个右括号,这会导致WPP_CALL_blahblah_undefined。但很有可能在这个例子中只是一个错字。