Я добавляю трассировку в приложение пользовательского режима на основе «Event Tracing for Windows» (ETW) с использованием WPP (препроцессор) и компилятора Visual Studio.
Это MSDN-контент объясняет, как конвертировать существующие макросы, чтобы разрешить трассировку из них.Примером является CHECK_HR, который получает один аргумент (HR) и генерирует трассировку, если он не равен 0.
Теперь я обнаружил, что сгенерированная функция препроцессора не работает, если аргумент multi, из-за того, как работает WPP.Но я не смог найти ссылку на такую проблему!
CHECK_HR(DoSomething(a,b,c)); // works
CHECK_HR(DoSomething(a,
b, c)); // don't work
Проблема в том, что когда макрос встречается препроцессором в строке 17 файла.cpp wpp, он генерирует функцию, называемую что-то вроде wpp_File_cpp17и использует LINE , чтобы вызвать его из макроса.Но для многострочного макроса, как указано выше, __LINE__ будет 18, и вы получите сообщение об ошибке:
wpp_File_cpp18: unknown function
Есть ли у кого-нибудь решение этой проблемы?Я знаю, что MSFT широко использует WPP внутри страны, мне интересно, как они справляются с этим ...