Windows SDK 版本 10.0.15063.0 和 10.0.17134.0 之间 tracewpp 行为的变化

Change of behavior of tracewpp between versions 10.0.15063.0 and 10.0.17134.0 of Windows SDK

我有一个应用程序依赖于通过 wpp 框架进行用户模式跟踪。但是,Microsoft 在 Windows SDK 的几个最新版本中引入了一些更改,以某种方式破坏了 tracewpp.exe 工具。我看到的实际问题如下所示:

& "C:\Program Files (x86)\Windows Kits\bin.0.15063.0\x64\tracewpp.exe" ... more args ...

按预期工作(我检查了旧版本的 SDK,低至 8.0 - 一切都很好)。

但是,当我尝试使用较新版本的 SDK 执行相同的构建时,构建中断并出现一个相当神秘的错误:

& "C:\Program Files (x86)\Windows Kits\bin.0.17134.0\x64\tracewpp.exe" ... all the same args ...

结果:

provider.tpl(0) : error wpp : (Template::DoId) Var not found: Provider tracewpp(0) : error wpp : (RealMain) Fatal error: Template parse error

有问题的模板最初来自这里:https://github.com/antoxar/WPPTracingSample/blob/master/sample/WppTracing/WppConfig/Rev1/provider.tpl

有人可以指出 tracewpp.exe 工具的更改日志,概述最近对其进行的更改或以其他方式阐明上述问题吗?

我遇到了同样的问题并解决了。在我的例子中,Microsoft Visual Studio 2017 使用 10.0.17763.0 SDK 和 运行 WPP 工具:

WindowsSdkVerBinPath=C:\Program Files (x86)\Windows Kits\bin.0.17763.0\

但是我的 tracewpp 命令引用了一个旧的“WppConfig\Rev1”目录。较新的工具需要不同的 provider.tpl 配置。我安装了这些不同的版本,指的是旧版本(最后一个)而不是匹配的“17763”版本。

C:\Program Files (x86)\Windows Kits\bin.0.17763.0\WppConfig\Rev1
C:\Program Files (x86)\Windows Kits\bin\WppConfig\Rev1

如果在 Visual Stdio 中使用预构建步骤,将路径从 $(WindowsSdkDir) 更改为 $(WDKBinRoot) 对我有用(您的其他选项可能会有所不同):

 tracewpp -I"$(WDKBinRoot)\WppConfig\Rev1" -odir:$(IntDir) -scan:Trace.h *.cpp

顺便说一句,Debug 构建我的项目也失败了。如果您需要调试符号而不是 /Zl (Debug with Edit and Continue),请确保使用编译器标志 /Ziwpptrace不支持