我正在尝试使用仪器分析混合模式程序。
对于我得到的其中一个 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 时,我确实看到了:
是(/简介)
还有其他想法吗?
请您参考如下方法:
我找到了这个链接:
这个答案看起来不错。
下面是答案:
我必须使用 64 位 visual studio 2013 版本的 vsinstr.exe
首先,这是VS2017版本的VSInstr.exe的一个bug。问题是它无法检测使用 VS2013 工具集构建的二进制文件。如果我没记错的话,PDB 读取器组件发生了变化,这使得较新的读取器无法读取旧工具生成的 PDB。在这种情况下,较旧的工具集用于生成二进制文件和 PDB,但较新的 VSInstr.exe 用于尝试检测。较新的 VSInstr 使用较新的 PDB 读取器,它无法读取旧工具生成的 PDB。您无法解决此问题,但我可以建议一个解决方法。
要解决此问题,您可以恢复为从命令行使用旧版 VSInstr.exe。较旧的 VSInstr.exe 可以读取由较旧的工具集生成的 PDB,并且检测成功。我在我的系统上试过了,它对我有用。以下是供您尝试的 6 个步骤:
以管理员身份打开 VS2013 开发人员命令提示符。 (所有后续操作都在此管理命令提示符下进行。) 检测目标应用程序。在这种情况下,我导航到 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。
艾伦·丹佛
Visual Studio
艾伦丹佛博士 [MSFT] · 7 月 22 日凌晨 5:37 嗨,艾伦,
我尝试了建议的解决方法,并对第 3 步做了一个小修正,因为它需要 OUTPUT 而不是 OUT:vsperfcmd/start:trace/output:test.vsp
在此之后,我能够在新的 VS 版本中打开生成的 vsp,因此解决方法有效。
非常感谢您的调查和解决方法!


