2

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

& "C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\tracewpp.exe" ... 更多参数 ...

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

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

& "C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x64\tracewpp.exe" ...所有相同的参数...

结果是:

provider.tpl(0) : 错误 wpp : (Template::DoId) Var not found: Provider tracewpp(0) : error wpp : (RealMain) 致命错误:模板解析错误

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

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

4

1 回答 1

0

我有同样的问题并解决了它。在我的情况下,Microsoft Visual Studio 2017 使用 10.0.17763.0 SDK 并在以下位置运行 WPP 工具:

WindowsSdkVerBinPath=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\

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

C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\WppConfig\Rev1
C:\Program Files (x86)\Windows Kits\10\bin\WppConfig\Rev1

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

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

顺便说一句Debug,我的项目的构建也失败了。/Zi如果您想要调试符号而不是/Zl (Debug with Edit and Continue). wpptrace不支持它。

于 2020-07-29T23:15:34.530 回答