错误 VSP1011:无法获取调试信息.与 /配置文件链接器开关链接

Error VSP1011: Unable to obtain debug information. Link with the /Profile linker switch

本文关键字:链接 配置文件 信息 开关 调试 VSP1011 获取 错误      更新时间:2023-10-16

我正在尝试使用检测来分析混合模式程序。

对于其中一个 dll,我得到:

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

当我在链接器/高级下查看该项目时,我确实看到:

是(/配置文件(

还有其他想法吗?

我找到了这个链接:

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"。检测应指示成功。 使用以下命令启动探查器监视器:"vsperfcmd/start:trace/out:test.vsp"。这将启动后台监视器,该监视器将在检测的进程发出跟踪信息时收集跟踪信息。 运行目标应用程序。在这种情况下,我跑了地形.exe。 使用以下命令关闭探查器监视器:"vsperfcmd/shutdown"。此命令会导致后台探查器监视器关闭并写出"test.vsp"文件。 在Visual Studio 2017中打开生成的"test.vsp"文件。即使 VSP 文件是使用 VS2013 中的监视器创建的,其中包含来自使用 VSInstr 检测的应用程序的数据.exe来自 VS2013,VS2017 读取器也应该能够很好地读取该文件并显示分析报告。 更简单的解决方法是将工具集更改为 VS2015 或 VS2017。在这种情况下,工具集生成 VSInstr.exe 的 VS2017 版本可以检测的二进制文件和 PDB。在示例项目中,在我更改工具集后,IDE 中的所有内容都将用于执行检测分析。当然,我相信您已经知道这种解决方法,但是这种解决方法的困难在于较新的工具集可能无法干净地构建项目,并且生成的二进制文件使用不同的CRT,因此根据编译器的版本和CRT或其他相关工具集库,可能会有不同的行为。为了使性能分析正常工作,可能不值得花费额外的工作来干净地构建较新的工具集,以及任何较新的库所涉及的风险等。

请让我知道您是否可以让上述解决方法为您工作。如果你不能,我很乐意进一步挖掘。

目前,我们没有计划让VS2017 VSInstr.exe用于检测使用VS2013工具集构建的应用程序。但是,我们将来会牢记这一点。如果我们对 VSInstr 进行改进.exe这是我们将考虑的改进之一。感谢您帮助Visual Studio变得更好。

艾伦·丹佛

视觉工作室

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

我尝试了建议的解决方法,并对步骤 3 进行了一个小的更正,因为它想要输出而不是 OUT:vsperfcmd/start:trace/output:test.vsp

在此之后,我能够在新的 VS 版本中打开生成的 vsp,因此工作正常。

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