错误VSP1011:无法获取调试信息。与/ Profile链接器开关链接

时间:2017-08-16 16:05:16

标签: c++ visual-studio-2013 linker profiling

我正在尝试使用仪器来配置混合模式程序。

对于其中一个dll:

Error VSP1011: Unable to obtain debug information. Link with the /Profile linker switch.
PRF0002: Instrumentation failed with these options: /u "C:\Utc\bin\x64\Release\oqpers.dll"   /excludesmallfuncs.  Please check the output window for additional details.

当我在Linker / Advanced下查看该项目时,我确实看到了:

是(/ PROFILE)

还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

我找到了这个链接:

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开发人员命令提示符。 (所有后续操作都发生在此admin 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更好。

Allen Denver

Visual Studio

ldrs Allen Denver [MSFT]·7月22日上午5:37 嗨艾伦,

我尝试了建议的解决方法并对第3步进行了一次小修正,因为它需要OUTPUT而不是OUT:vsperfcmd / start:trace /output:test.vsp

在此之后,我可以在新的VS版本中打开生成的vsp,因此workaroud可以工作。

非常感谢您的调查和解决方法!