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