我发现这个链接:
https://developercommunity.visualstudio.com/content/problem/80750/analyze-c-performance-prf0002-instrumentation-fail.html
这个答案看起来不错。
下面是答案如下:
我不得不使用64位的Visual Studio 2013版本的vsinstr.exe
首先,这是VSInstr.exe的VS2017版中的错误。问题在于它无法测试使用VS2013工具集构建的二进制文件。如果我没有记错,PDB阅读器组件中发生了一些变化,使较新的阅读器不能阅读旧版工具生成的PDB。在这种情况下,较旧的工具集正在用于生成二进制和PDB,但正在使用较新的VSInstr.exe来尝试检测。较新的VSInstr使用较新的PDB阅读器,它无法阅读旧工具生成的PDB。没有什么事情可以解决这个问题,但我可以提出一个解决方法。
要解决此问题,可以从命令行恢复使用较旧的VSInstr.exe。较旧的VSInstr.exe可以读取较旧工具集生成的PDB,并且检测成功。我在我的系统上试过这个,它适用于我。以下是您可以尝试的6个步骤:
以管理员身份打开VS2013开发人员命令提示符。 (所有后续操作都发生在此管理员cmd提示符中。) 监测目标应用程序。在这种情况下,我导航到InstrumentationDemoApp \ Release文件夹,然后键入“vsinstr terrain.exe/excludesmallfuncs”。仪器应该表明成功。 使用以下命令启动Profiler监视器:“vsperfcmd/start:trace /out:test.vsp”。这将启动后台监视器,该监视器将收集由仪表进程发出的跟踪信息。 运行目标应用程序。在这种情况下,我运行terrain.exe。 使用以下命令关闭Profiler监视器:“vsperfcmd/shutdown”。此命令会导致后台分析器监视器关闭并写出“test.vsp”文件。 在Visual Studio 2017中打开生成的“test.vsp”文件。即使VSP文件是使用来自VS2013的监视器与来自VS2013 VSInstr.exe检测的应用程序的数据创建的,VS2017阅读器应该能够阅读文件就好了,并显示分析报告。 更简单的解决方法是将工具集更改为VS2015或VS2017。在这种情况下,工具集会生成VSInstr.exe的VS2017版本可以测试的二进制文件和PDB。在您的示例项目中,在更改工具集之后,IDE中的所有内容都可用于执行检测分析。当然,我相信你已经知道这个解决方法,但是这个问题的困难在于,较新的工具集可能无法干净地构建项目,并且由此产生的二进制文件使用不同的CRT,因此具有基于版本编译器和CRT或其他相关的工具集库。为了简化工作,可能不值得花费额外的工作来完成较新的工具集的构建以及任何较新的库的风险等。
请让我知道如果您可以使用上述解决方法为你。如果你不能,我会很乐意深入挖掘。
目前,我们还没有计划让VS2017 VSInstr.exe工作来测试使用VS2013工具集构建的应用程序。但是,我们将在未来记住这一点。如果我们对VSInstr.exe进行改进,这是我们将考虑的改进之一。感谢您帮助Visual Studio变得更好。
艾伦丹佛
的Visual Studio
贷存比阿伦丹佛[MSFT]·7月22日在5:37 嗨艾伦,
我尝试了建议的解决方法,并已取得了一个小幅调整第3步,因为它想要OUTPUT而不是OUT:vsperfcmd/start:trace /output:test.vsp
之后,我可以在新的VS版本中打开生成的vsp,所以workaroud工作。
非常感谢您的调查和解决方法!
实际上哪个工具链? – user0042
我正在使用Visual Studio 2017,但我们正在编译2013工具链。 – Derek
对于此项目,平台工具集=“Visual Studio 2013(v120)” – Derek